1. 동적으로 HTML Form을 생성

<html> 
<head>
</head>
<body>
<script>
generatorForm();

function generatorForm() {
var formEle = document.createElement("form");
formEle.setAttribute('method',"post");
formEle.setAttribute('action',"/action");

var tmpInput = document.createElement("input"); //input element, text
tmpInput.setAttribute('type',"text");
tmpInput.setAttribute('name',"tempValue");

formEle.appendChild(tmpInput);

var submitBtn = document.createElement("input"); //input element, Submit button
submitBtn.setAttribute('type',"submit");
submitBtn.setAttribute('value',"Submit BTN");

formEle.appendChild(submitBtn);

document.body.appendChild(formEle);
}
</script>
</body>
</html>


2. 문제 발생

 1) 에러

document.body.appendChild(formEle);

  - 위 소스를 추가 안할 경우 제대로 동작을 안함. 꼭 추가해야함.


Pivotal 이 서울에서 처음 진행하는 행사라고 함.



1. 개발에 집중하기
- 개발자가 개발에 집중 할 수 있어야한다.
- 운영환경에서 손쉽게 모니터링을 할 수 있어야한다. (Spring actuator)
- 배포는 편하게 잘~ 되어야한다.



-> 위 내용을 듣는동안 공감이 많이 갔다. 업무를 진행하면서 세팅한 프로젝트들은 위 내용들을 잘 수행하였는가? 부족한 부분이 어디였을까?를 고민했다. 그러다보니 어느정도는 구축해서 운영하는 듯 했다. 모니터링에 필요한 apm을 운영했고, jenkins를 사용하여 보다 편하게 배포를 진행했던 것 같다. 단, 더 잘 할 수 있었을 것 같은 부분들이 있어서 그 부분들을 좀 더 고민해봐야겠다



2. Netflix
- netflix oss
- Zuul, Eureka.....

-> 자주 들었던 이야기지만, 역시나 대단한 회사다. 내부적으로 만든 프로그램을 오픈소스로 공개하고, 좋은 경험을 공개하는 이 회사가 참 대단하다고 한번 더 느꼈다.


3.PCF(Pivotal Cloud Foundry)
- UI가 잘 되어있다.
- 아~ 있으면 좋겠다~ 하는 기능이 많다! (Spring boot admin과 같이 필요한 기능이 잘 되어 있는 듯 하다.)

-> 나중에 시간을 내서 사용해봐야겠다. 사용해봐야 추후 만들 때 도움이 되니까!!



* 사진은 정말 대충 찍었습니다.

'개인 > 단상' 카테고리의 다른 글

2018-06-05 : Cloud Native Day in seoul  (0) 2018.06.05
2018-05-01  (0) 2018.05.01
Aws re:invent 2017! 후기  (0) 2017.12.02
2016-10-01  (0) 2016.10.01
2016-09-08  (0) 2016.09.08

1. Content Type

 - 파일명에 따라 ContentType을 설정한다.


ObjectMetadata objMeta = new ObjectMetadata();
objMeta.setContentType(Mimetypes.getInstance().getMimetype(saveFileNm));


2. Content Length

 - byte length를 추가한다.

ObjectMetadata objMeta = new ObjectMetadata();

byte[] bytes = IOUtils.toByteArray(targetIS);
objMeta.setContentLength(bytes.length);

ByteArrayInputStream byteArrayIs = new ByteArrayInputStream(bytes);

PutObjectRequest putObjReq = new PutObjectRequest(bucketName, key, byteArrayIs, objMeta);
s3client.putObject(putObjReq);

 - 해당 소스처리를 안할 경우 아래와 같은 warning 메시지가 뜬다.

[WARN ] c.a.services.s3.AmazonS3Client:1714 - No content length specified for stream data.  Stream contents will be buffered in memory and could result in out of memory errors.


1. 약수

 -  어떤 수를 나누어 떨어지게 하는 수.


2. Python 소스

if __name__ == "__main__":
number = int(input("숫자를 입력해주세요. : "))

divisors = []

for i in range(1, number + 1):
if number % i == 0:
divisors.append(i)

print(divisors)


'프로그래밍 > Python' 카테고리의 다른 글

10진수 n진수로 변환하기.  (0) 2018.07.30
[Basic] 약수  (0) 2018.06.04

해당 내용은 https://github.com/java-json-tools/json-schema-validator 를 사용하면서 적은 내용입니다.


1. NodeType

{.... "type": "string or array...."}


 - NodeType 목록

 ARRAY("array"),

 BOOLEAN("boolean"),

 INTEGER("integer"),

 NULL("null"),

 NUMBER("number"),

 OBJECT("object"),

 STRING("string")


 - 해당 Library에서는 "com.github.fge.jackson.NodeType"를 참고하시면 편하게 코딩할 수 있다.


2. minItems, maxItems

{.... "minItems":0, "maxItems":2....}


 - 아이템 수롤 지정할 수 있다.

 - type이 array일 경우 해당 옵션으로 아이템 수를 체크할 수 있다.


1. Json 파일 import 하기.

<script>
import externalJsonFile from './externalJsonFile.json'
export default{
data(){
return{
jsonFile: externalJsonFile
}
}
}
</script>


2. 가져다 쓰기

<ul v-for="tmp in jsonFile">
<li>{{tmp}}</li>
</ul>


AWS, java, S3

1. 기존 메소드


AmazonS3 s3Client = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey));

 - 해당 메소드 수석을 참고하면 아래와 같다.

/**
* Constructs a new Amazon S3 client using the specified AWS credentials to
* access Amazon S3.
*
* @param awsCredentials
* The AWS credentials to use when making requests to Amazon S3
* with this client.
*
* @see AmazonS3Client#AmazonS3Client()
* @see AmazonS3Client#AmazonS3Client(AWSCredentials, ClientConfiguration)
* @deprecated use {@link AmazonS3ClientBuilder#withCredentials(AWSCredentialsProvider)}
*/
@Deprecated
public AmazonS3Client(AWSCredentials awsCredentials) {
this(awsCredentials, configFactory.getConfig());
}


2. 변경된 메소드

BasicAWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(creds)).build();


 - 리전을 추가할 경우

.withRegion(Regions.valueOf("AP_NORTHEAST_2"))


'프로그래밍 > JAVA' 카테고리의 다른 글

AWS s3 upload source Tip  (0) 2018.06.05
json schema validator 사용하기 - 02  (0) 2018.05.23
AmazonS3Client, deprecated!!!  (0) 2018.05.21
json schema validator 사용하기 - 01  (0) 2018.04.18
시스템 종료 후 File 삭제  (0) 2018.04.12
Java에서 Tuple 사용하기.  (0) 2018.04.11

1. safari 11.1 update

 - 기존 Safari (mac or ios)에서는 정상적으로 동작하던 ajax가 safari 11.1 버전 업데이트를 진행한 후로 오류가 발생함.

 - ajax 내 error 메시지가 다음과 같다

Failed to load resource: The operation couldn’t be completed. Protocol error

 - Chrome이나 Firefox 등 최신버전에서는 문제가 없었다.


2. 원인 

 - Webkit 버그!!!! (Webkit 빌드 r230963)

 - input[type=file] 또는 formData 내에 file 

<input type="file"/>

 - ajax 내 data에 빈 파일 필드가 전송되면 발생함.

 - (전 IOS 11.3에서 발생하여 수정 했습니다.)


3. 해결책

 - https://trac.webkit.org/changeset/230963/webkit : 수정됨.

 - 임시 해결책


frmData.delete("file"); //var frmData = new FormData() 를 사용할 경우

or

$("input[type=file]").each(function () {
var tmpValue = $(this).val();
if (tmpValue === undefined || tmpValue === "") {
$(this).remove();
}
});


그냥 평소에 자주 쓰는 툴 및 사이트 공유...


1. 웹사이트

 1) jwt.io

 - 바로가기

 - jwt 를 손쉽게 decoded 할 수 있는 곳


 2) jsonlint.com

 - 바로가기

 - JSON Validation 해주고, beautify 해준다.


2. Chrome Extension

 1) Css viewer

- 바로가기

- 웹페이지 내 css를 손쉽게 볼 수 있다.


 2) postman

- 바로가기

- 너무 유명한 Rest Client


 3) editthiscookie

- 바로가기

- 쿠키값을 조작하기 편한 extension


 4) JWT Analyzer & Inspector

- 바로가기

- 위에 웹사이트 탭에 있는 jwt.io처럼 jwt 값을 손쉽게 decoded 해주는 툴


 5) JSONView

- 바로가기

- Json 파일을 이쁘게 보여줌.


1. Job 정보 가지고 오기.

 - 개발하는 중에 ItemReader, ItemProcessor, ItemWriter 등에서 job정보를 가지고 와야 할 때가 있다.

 - 간단한 소스 추가로 사용 가능하다.


2. 소스

private Long jobId;

@BeforeStep
public void getInterstepData(StepExecution stepExecution) {
JobExecution jobExecution = stepExecution.getJobExecution();
this.jobId = jobExecution.getJobId();
}

 - 비슷한 방식으로 확장해서 사용 가능 할 듯.


* 참고 링크


+ Recent posts