전체 글
[Spring] MVC : Controller와 Service의 책임 나누기
2020.07.06 : System Design & Archmartinfowler.com/bliki/PresentationDomainDataLayering.html 우선, 가장 크고 중요한 개념은 layer다. 일반적으로 많이 사용하는 layer 구분 Presentation layer Service layer Business layer Persistence layer *** 기타 sublayer 들을 포함할 수도 있음. layer를 왜 분리할까? layer를 분리한다는 것에는 어떤 의미가 있는가? layer를 나눈다는 것은, 무언가를 추상화 하는 것이 그 목적이다. 추상화를 잘 했다면, 각기 다른 계층끼리 부품을 갈아끼우듯 변경할 수 있다. 각 layer가 자신의 세부사항을 몰라도 상관 없도록, 잘 추상화해서 제공하고 있었다면 가능하다. 컴포넌트들의 서로의 의존..
[Spring] MVC : Model 클래스와 요청/응답 Data 클래스, Map을 사용하는 것?
2020.06.25 : System Design & Arch* Model은 보통 Business layer에서 사용하는 Domain Model을 의미한다. * 기타 layer에서 사용하는 Data Class는 Data Class라고 불렀다. 내용을 요약하면? data class 만드는걸 주저할 필요가 전혀 없다. 그러나 항상 data class만을 써야 하는 것은 아니다. Map으로 받아야 깔끔한 순간이 분명 있다. 1. 클래스가 많아서, 파일이 많아서 지저분해질거 같아서 Map을 사용하겠다? => 요청/응답 전용 data class들만 따로 패키지를 만들어서 거기에 몰아넣고 열어보지 않으면 될 일이다. 이건 Map을 사용할 이유는 못되는 듯. 2. 이름(key)을 제외한 나머지 속성들이 모두 비즈니스 로직에서 전혀 쓰이지 않는다면, data class 안만들고..
Java Servlet 이란
2020.06.15 : Languages & Frameworks/SpringServlet이 무엇인가? A servlet is a Java programming language class used to extend the capabilities of servers that host applications accessed by means of a request-response programming model. Although servlets can respond to any type of request, they are commonly used to extend the applications hosted by web servers. For such applications, Java Servlet technology defines HTTP-specific servlet classes..
SameSite Cookie
2020.06.15 : Languages & Frameworks/Front-end쿠키(Cookie)와 저장소(Storage) SameSite cookies explained https://web.dev/samesite-cookies-explained/ first-party cookie와 third-party cookie 브라우저는 도메인 별로 쿠키를 저장하고 있다. 따라서 다른 도메인으로 이동한다고 해서 쿠키가 삭제되지 않는다. 다른 사이트 갔다가 돌아왔을 때, 로그인 상태가 유지되는 것은 브라우저가 해당 도메인의 세션 쿠키를 다시 꺼내기 때문이다. 어떤 도메인에 요청할 때, 브라우저는 해당 도메인의 쿠키를 꺼내 헤더에 포함하여 전송하도록 되어 있다. 내가 현재 도메인 A에 있고, 페이지 내에 삽입된 이미지는 외부 도메인 B의 데이터다. 이미지를 불러오기 위하여 외부 도메인 B로 요..
Same-origin Policy, CORS
2020.06.14 : Languages & Frameworks/Front-endSame-origin Policy와 CORS https://en.wikipedia.org/wiki/Same-origin_policy 영문 위키가 젤잘나와있음. 시나리오까지. W3C spec Same-origin Policy란? 스크립트에 적용되는 정책이며, 스크립트 내에서 다른 리소스를 요청할 때 요청지가 Same-origin이 아니면 막는 정책 현재 리소스(스크립트)를 가져온 출처와 (프로토콜, 호스트, 포트)가 동일한 출처를 Same-origin으로 판단한다. 이는 브라우저가 `` document.domain``을 보고 판단함. 좀 더 정확히는, Cross-origin read를 막는다. https://developer.mozilla.org/ko/docs/Web/Security/Same-origin_..
[Java] Enum to Json / Enum to Object
2020.04.27 : Languages & Frameworks/JavaEnumConstant 하나를 `` {fieldName:fieldValue}`` 형식으로 매핑하고 싶은 경우가 있다 ( 주로 뷰로 전달해야 할 때. ) 기본적으로 jackson의 ObjectMapper는 serialize/deserialize 할 때 Enum 코드만 내려주도록 되어 있다. 즉, ``java PaymentCode.CARD``를 변환하면 ``java "CARD"``가 된다. ``java {code=1, koName="카드", enName="card"}`` 형태로 내려주려면, 뭔가 해줘야 한다 방법 1 ) Jackson / ObjectMapper를 사용하고 싶은 경우 방법 1-1 ) @JsonFormat.Shape.OBJECT key:value 쌍을 내려주고 싶은 경우를 대비해 jackson은..
React
2020.04.13 : Languages & Frameworks/JSgithub.com/umbum/react-basic-hooks/blob/master/docs/README.md FE react 패키지 목록 React component https://ko.reactjs.org/docs/hello-world.html props를 전달 받아 React Element를 반환하는 function 혹은 class state라는 내부 상태를 가질 수 있음 props는 react component의 파라미터, state는 react component의 필드라고 생각하면 됨. react state 관리 https://ko.reactjs.org/docs/react-component.html ``js this.state``를 직접 변경하면 안 됩니다. 왜냐하면 이후 호출되는 ``js se..
RestTemplate은 어떻게 response Object를 DataType <T>로 변환하는가
2020.03.27 : Languages & Frameworks/Spring원래 그 데이터 타입으로는 캐스팅 가능 ```kt @Test fun `테스트`() { val obj: Object = Coffee("id", "name") as Object val coffee: Coffee = obj as Coffee // 이건 원래 그 데이터가 Coffee라서 가능 val obj2: Object = Object() val coffee2: Coffee = obj2 as Coffee // 이건 불가능. id 속성이랑 name 속성이 없으니까 당연 불가능하다 } ``` RestTemplate의 response Object -> T type casting 과정 RestTemplate도 내부적으로는 `` (T)`` 캐스팅을 이용하게 되는데 ``kt extractData()``에서 비검사 형변환..
Promise / Future에 대한 개념 정리
2020.03.20 : Coding NotePromise / Future란? `` Future``는 미래에 실행이 완료될 것으로 예상되는 객체를 의미한다. 따라서 아직 실행되지 않은 경우나, 실행 중이지만 아직 완료되지 않은 경우를 포함하는 개념임. Future 객체에 요청한 값이 들어오기를 기다리는 동안 다른 연산을 수행할 수 있다. `` Promise`` 기본적으로 Future와 비슷하지만, Future는 외부에서 완료된 결과가 들어오기만 하므로 read-only, Promise는 강제로 내가 complete 할 수 있는 메서드를 제공한다는 차이점이 있다. (그래서 completable) 자바에서 `` Promise == CompletableFuture`` `` .complete()`` 라는 메서드를 제공하고 있음. https://stacko..
[Kotlin] Serialization: Gson, Jackson
2020.03.19 : Languages & Frameworks/Kotlin[Java] Jackson ObjectMapper Serialization Jackson 역직렬화 시 발생할 수 있는 에러 ( jacksonObjectMapper() ) ```javastacktrace InvalidDefinitionException: Cannot construct instance of `com.test.example.data.Coffee` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator) ``` redis에서 받아와서 kotlin data 클래스인 Coffee에 넣으려고 하는데 발생 Jackson이 Deserializ..
[Spring] resources 경로 문제
2020.03.18 : Languages & Frameworks/Java*** Spring에 대한 내용과 Jar에 대한 내용이 섞여있어서... 적당히 분리해서 이해해야 함. resources 이하에 있는 파일들(.yml, .properties, 인증서 등)은 컴파일 타임에 CLASS_PATH로 이동하여 함께 포함되어 빌드된다. spring의 경우 target/classes에 위치. jar로 컴파일 하도록 했으면 .jar에 포함된다. 그래서 리소스를 ClassPath 사용해서 제대로 불러왔다면 `` build/resources``를 통째로 날려도 잘 실행 된다. yml 등은 알아서 jar 내에 있는 것을 사용한다. 다만 소스코드 내에서 ClassPath를 쓰지 않고 그냥 File에 접근하게 되면, 실제 파일시스템에 있는 해당 경로로 가서 해당 파일이 있는지를 찾는다. 이 때 ..
Netty
2020.03.12 : Languages & Frameworks/Java-asynchttps://github.com/netty/netty/wiki/User-guide-for-4.x https://netty.io/wiki/user-guide-for-4.x.html 공식 docs가 최고야! Netty가 무엇인가? Netty is an asynchronous event-driven network application framework. Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming s..