dev/web 48

[javascript] for ... in VS Object.keys()

자바스크립트 객체 루프하는 방법의 차이를 알아보자. var par = { prop1: "some val", someMethod: () => "value" }; var obj = Object.create(par); obj.prop2 = "some other val"; // obj prototype은 par console.log(Object.getPrototypeOf(obj) === par); // true // 상속된 prototype의 property까지 탐색 for (const key in obj) { console.log("Key: ", key, "Value: ", obj[key]); } // "Key: ", "prop2", "Value: ", "some other val" // "Key: ", "p..

dev/web 2023.05.09

[Spring Boot] datasource bean not working

Config class에서 아래처럼 빈 설정을 하고 사용하다.@Bean @ConfigurationProperties("spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } dbcp를 변경하고 application.properties에 설정하였으나 jdbc url를 제대로 읽어들이지 못함 propertie를 자동으로 바인딩 해주고 datasource가 만들어질거라 예상했지만, 위 설정으로는 자동바인딩이 되지 않는다.(수동설정이 우선되므로 자동설정을 못하게 할뿐) 자동바인딩이 안되는 이유는 Builder에 setter가 없기 때문인것 같다.(자세한건 @ConfigurationPropert..

dev/web 2017.08.17

spring @ModelAttribute and @RequestBody

컨트롤러 request mapping시 인자로 객체를 받을 수 있는데 어노테이션이 헷갈린다. @ModelAttribute는 단순히 요청으로 들어온 parameter와 객체 빈의 멤버변수와 bind한다. 없으면 null@ModelAttribute 요청으로 들어온 bind된 object를 Model에 Attribute로 추가시켜준다. View에서 사용할 수 있도록model.addAttribute의 호출을 편하게 도와주는 역활 이부분이 어째서 구글링으로 혼선을 야기했는지는 모르겠다.필자도 헷갈렸다.ㅠㅠ아직 많이 부족하다. @RequestBody는 HttpMessageConverter 구현체를 거쳐서 받는다. 특정 객체에 대한 컨버터를 지정해주지 않으면 Unsupported Media Type이라고 나올것이다...

dev/web 2017.08.13

SpringBoot @RequestBody 그리고 form

@RequestBody 어노테이션은 JSON이나 XML등을 인자로 받을 수 있게 해준다.인자로 변환하는 과정에서 HttpMessageConverter의 구현체가 필요하다.Jackson 라이브러리를 사용중이면 자동으로 등록된다. 태그를 사용한 값을 받을때에는 content type이 multipart/form-data 혹은 application/x-www-form-urlencoded일텐데이를 변환시켜주는 FormHttpMessageConverter가 있으며 MultiValueMap 형태로 받을 수 있다.이런경우엔 보통 객체로 받는것이 훨씬 편하다.(멤버변수 자동 매핑) multipart/form-data의 경우에는 FormHttpMessageConverter에서 분명 지원하지만, HttpMediaTypeN..

dev/web 2017.07.09

Ajax 크로스 도메인 세션유지

세션(HTTP Session)웹 프로토콜 HTTP는 무상태(stateless)이다.전통적으로 로그인 인증처리를 위해, 웹서버는 프로토콜과 무관하게 세션이라는 것을 제공한다.이는 웹 어플리케이션에게 필요한 state를 서버에 전달하기 위한 목적으로 session이나 cookie를 이용하는 대체수단정도로 볼 수 있다.세션이 생기면서 웹서버는 상태 프로토콜(stateful)처럼 동작하고 있다. XMLHttpRequest 과 CORSAJAX 통신시 크로스 도메인 이슈가 있으며,이에 대한 해결책으로 CORS라는 게 있다.사전요청(preflight)으로 서버에 질의한뒤, 실제 요청을 보내는 형태로 되어있다.참고: https://developer.mozilla.org/ko/docs/Web/HTTP/Access_con..

dev/web 2017.03.02

웹 기술 동향 - 개인적인 로그

기술 동향이라 써놓으니 너무 거창하다.사실, 기술 동향이라는 것은, 꽤나 비현실적인 경우가 태반이라 생각하는데, 어느정도 업종에 종사를 하다보니, 중요한 것임을 깨닫고 있다. 2007년 아이폰2008년 HTML5 그리고 크롬 사실 이 흐름은 필자가 받아들이 벅차다. 기억을 더듬어 보자면학창 시절 Adobe Flash를 가지고 놀던(AS3는 너무나 재밌었고, Tweener의 입문이었을 것이다) 필자에게, HTML5의 등장은 좌절이었다. 요즘엔 클라우드라는 말이 들리지 않는다.분명 몇년 전만해도 여기저기 클라우드라는 이름으로, 고작 원격 스토리지를 제공했었는데 말이다.대신 AWS, BaaS, PasS같은 소리가 들린다. 그야말로 뜬구름 같았던 Cloud Computing이 현실이 되어 버렸다.여전히 벅차다...

dev/web 2017.03.02

camel case vs snake(underscore) case

개발자의 고찰 네이밍 규칙 개인의 네이밍 규칙을 명확히 정해야 할 필요성이 있다.ㅠㅠ https://whathecode.wordpress.com/2011/02/10/camelcase-vs-underscores-scientific-showdown/의 투표결과는 camel case가 근소히 높다. 하지만, 개인적으로 필자는 snake case를 선호한다.(자바를 코딩할땐, 예외지만 말이다.) camel case변수 - variableName상수 - CONSTANT_NAME메소드 - methodName클래스 - ClassName snake case변수 - variable_name상수 - CONSTANT_NAME메소드 - method_name클래스 - Class_name 일반적인(?) 형태는 위와 같다. 상수와..

dev/web 2016.01.23

"Data truncated for column 'column_name' at row 1" 고찰

DB INSERT 시 컬럼이 NOT NULL 여부에 관계없이 실수나 정수형에 데이타에 ''(빈문자열)을 입력하면 발생하는 오류다. sql_mode가 STRICT mode이면 ERROR을 아니면 WARNING을 표시해준다. 그런데 persistent connection도 문제의 원인이 될 수 있나 보다. 정확한 쿼리 사용이 되면 좋겠지만, 현실은 그렇지 않다. 유지보수 및 추가개발 등으로 남의 코드를 보다 보면, 빈번히 볼 수 있을 것이다. 겪은 상황을 요약한다. 서버 - CENT OS 언어 - PHP DB - MARIADB 버전은 생략한다. DB 프로시저를 호출, 프로시저 내부에서 INSERT문 수행 쿼리순서 prepared statement사용 CALL procedure SET @param을 수행 EX..

dev/web 2015.09.10

[JS] 이미지 리사이즈 스크립트

목적 : 부모 div박스안에 이미지를 비율에 맞게 컨트롤 한다.유용한게 쓰던 스크립트는 오늘 새로 손을 보았다. int_resizeimage2=0;resizeimage2 = function(obj,boxsize_w,boxsize_h,outsize_w,outsize_h,isFill,longpic_proc,callback) {var ratio=0,box_ratio=0,target_w,target_h,$parent = $(obj).parents('div');if(typeof(isFill)=="undefined") isFill=false;//default valuetry{if(boxsize_w=="auto") boxsize_w=$parent.width();boxsize_h = boxsize_h || boxsiz..

dev/web 2014.07.13

ajax 호출시 응답 데이터타잎에 대해..

자바스크립트의 디자인 패턴에 대한 고민이 생겼다. 일단, jQuery의 사용이 일반화되어서 인지, native code에 대한 고민은 사라졌지만, 디자인패턴은 항상 날 괴롭힌다. 자바스크립트도 알수록 어렵다. 서버야 MVC패턴이 대세를 이루고, 공동작업 환경이라, 갖추어진 스펙을 따르겠지만, 작은 부분들에 대한 결정이 가끔은 머리를 아프게 한다. 이번에 다룰 것은 Ajax호출이다. 때때로, ajax콜은 필요이상의 서버부하를 일으키는 원이이지만, 대체적으로는 아주 좋은 환경을 제공한다. 필자는 무식하게 ajax콜을 선호한는 편이다. 단순히 view의 일부분을 동적으로 구현해야 한다면, 무조건 ajax콜을 한다. 그 무식한 이유는 코드양이 적어진다 것이다. 복붙해서 같은 내용이 들어가는 view를 생성할 생..

dev/web 2014.07.05