dev/web 49

stateless 인증과 jwt, 그리고 위변조에 대한 이야기

항상 개발을 하다보면, 인증 처리 방식에 대한 고민이 많다. 모바일이 보편화 되고, SPA 웹앱으로 개발하는 일도 많다보니, 세션을 사용하는 일은 거의 없다. 대세의 jwt를 쓰면서도, 자유롭게 설정 가능한 payload는 가끔 또 고민의 고민을 낳고 있다. 그렇게 사용하게 된 jwt의 장,단점에 대해 이야기를 해본다. stateless 인증으로 jwt를 채택하여 얻게 되는 장점은 많다.서버사이드 세션관리가 필요없으므로, scale-out하기에 용이하다.단순하고 직관적이면서도, 위변조는 안된다. 하지만 , payload가 노출은 되므로, 신경 쓸 부분이 많다.예를 들어 payload에 중요한 정보를 넣어서는 안되고탈취에는 취약하므로, 방지책도 고려해야 한다. 또한, Issuer나 Audience, Iat..

dev/web 2024.11.08

[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