나의 개발일지



· HTTP
서버에서 인증 관련 Http 상태 코드를 정의할 때, 상황에 따라 401 Unauthorized와 403 Forbidden을 사용할 수 있습니다. 해당 Http 상태 코드에 대해서 RFC 문서를 읽어보면서 알아보고, 어떤 상황에 어떤 상태 코드를 사용해야 하는지 알아보겠습니다. 401 Unauthorized RFC 7235: Hypertext Transfer Protocol (HTTP/1.1): Authentication The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypermedia information systems. This document ..
· 회고
8월 9일을 시작한 GDSC 모던 자바 인 액션 스터디가 오늘(10월 9일) 8주차 Optional 클래스와 날짜와 시간 클래스 학습으로 마무리됐다. 처음 진행해 본 강의식 스터디를 리뷰해보려고 한다. 왜 했는가? 2021년 초로 기억한다. 스프링을 학습하기 위해 인프런에 올라온 스프링 입문 강의를 듣는데, 다음과 같은 코드를 보여주셨다. 강사님께서는 이 강의가 자바 8 강의는 아니니까 ~ 라고 말씀하시면서 강의를 이어나가셨지만, 자바 8 문법에 익숙하지 않았던 수강생인 나는 매우 당황스러웠다. 그당시 들었던 의문점은 다음과 같다. 화살표는 어떤 의미이지..? Member를 왜 Optional로 감싸서 반환하지..? stream()을 꼭 선언해줘야 filter를 쓸 수 있는걸까? 사실상 자바 8에 대한 ..
보통 Web Layer(컨트롤러 계층)을 테스트할 때 슬라이싱 테스트인 @WebMvcTest를 사용합니다. 이번 글에서는 @WebMvcTest를 사용했을 때 불편했던 점들과 개선한 방법에 대한 경험을 공유하고자 합니다. @WebMvcTest란? 여러 스프링 테스트 애노테이션 중, Web(Spring MVC)에 집중할 수 있는 애노테이션입니다. 선언할 경우 @Controller, @ControllerAdvice 등을 사용할 수 있습니다. 단, @Service, @Component, @Repository 등은 사용할 수 없습니다. - 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 컨트롤러 계층 만을 슬라이스 테스트할 수 있도록 도와주는 애노테이션입니다. WebMvcTest (Spring Boot 3.1.2..
· Java
들어가며 GDSC 모던 자바 인 액션 스터디 발표자료를 준비하기 위해 책을 읽어보던 도중, 책에서 Enum 비교를 위해 공통적으로 equals 메서드를 사용하는 것을 알게 되었습니다. Enum은 == 비교가 가능하며 이에 따른 이점이 존재하므로, 강의를 진행함에 있어서 책에서 제공하는 소스 코드와 다르게 진행하게 된 이유를 말씀드리고자 합니다. 우리는 String의 문자열 내용을 비교할 때는 String의 equals 메서드를 사용합니다. JLS, 15.21.3 Reference Equality Operators == and != 를 보면 해당 내용에 대한 설명이 잘 나와있습니다. (마지막 문단) == 는 String 유형의 참조를 비교하는데 쓰일 수 있지만, 이러한 동등성 테스트는 두 피연산자가 동일한..
· Java
클래스 정의하는 방법 JLS 8.1 Class Declarations 클래스 선언은 명명된 새 참조 유형을 지정합니다. 클래스 선언에는 일반 클래스 선언과 열거형 선언(enum declarations)의 두 가지 종류가 있습니다. 이 섹션의 규칙은 enum 선언을 포함한 모든 클래스 선언에 적용됩니다. 그러나 class modifiers, inner class, supper class와 관련된 열거형 선언(enum declaration)에는 특별한 규칙이 적용됩니다. 이러한 규칙은 JLS 8.9 를 참고하세요. 클래스 선언의 TypeIdentifier는 클래스의 이름을 지정합니다. 클래스가 둘러싸는 클래스 또는 인터페이스와 동일한 simple name을 갖는 경우 컴파일 타임 오류입니다. 클래스에서 사용..
이번 글에서는 Java 진영에서 테스팅을 위해 사용되는 프레임워크인 JUnit을 만들어보겠습니다. 참고 프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임워크가 맞습니다(JUnit) 반면에 내가 작성한 코드가 직접 제어의 흐름을 담당하면 그것은 프레임워크가 아니라 라이브러리입니다.(스트림 라이브러리) https://curlunit.sourceforge.net/doc/cookstour/cookstour.htm JUnit A Cook's Tour를 참고해서 진행하겠습니다. 먼저 기본 개념인 TestCase를 나타내는 개체를 만들어야 합니다. 개발자는 종종 테스트 사례를 염두에 두고 있지만 다양한 방식으로 이를 실현합니다. print statements debugger expressions..
· Spring
🤔문제 발생 https://blogs.jsbisht.com/blogs/2016/09/07/json-deserialize-generic-types-using-gson-and-jackson https://blogs.jsbisht.com/blogs/2016/09/12/deserialize-json-with-java-parameterized-constructor 재밌는 예제가 나와있는 문서를 찾아, 따라해보고 있었습니다. @RequestBody로 넘겨준 JSON은 다음과 같습니다. { "status": true, "code": 200, "data": { "id": "123456", "profileUrl": "https://www.facebook.com/123456" } } 작성한 API를 테스트하기 위해, Re..
· Spring MVC
이번 글에서는 스프링 MVC가 제공하는 기본 기능들을 알아봅니다. 요청 매핑 미디어 타입 조건 매핑 - HTTP 요청 Content-Type, consume /** * 미디어 타입 조건 매핑 * Header의 Content-Type이 application/json 일 때만 호출 */ @PostMapping(value = "/mapping-consume", consumes = MediaType.APPLICATION_JSON_VALUE) public String mappingConsumes() { log.info("mappingConsumes"); return "ok"; } HTTP 요청의 Content-Type 헤더를 기반으로 미디어 타입으로 매핑합니다. 만약 맞지 않으면 HTTP 415 상태코드(Unsu..
· CS
팀 프로젝트에서 Oauth2.0 프로토콜과 JWT를 사용한 소셜 로그인을 구현하다가 다음과 같은 의문점이 들었습니다. Oauth가 정확히 무엇일까? JWT를 사용한 로그인 방식은 세션을 이용한 로그인 방식과 어떤 차이점이 있을까? 장단점은 무엇일까? 401 Error가 발생하는 이유는 무엇일까..? 이러한 의문점들을 해결하고자, 로그인 관련 정보들을 정리해서 공부해야겠다는 생각이 들었습니다. 다음과 같은 순서로 진행됩니다. HTTP 프로토콜의 특성 로그인 - 쿠키 로그인 - 세션 로그인 - 필터, 인터셉터 Oauth: Open Authorization JWT Oauth 2.0 소셜 로그인 과정 CORS 1. HTTP 프로토콜의 특성 기본적으로 HTTP 프로토콜 환경은 “connectionless, sta..
SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체지향 설계의 5가지 원칙을 정리 SRP : 단일 책임 원칙 (Single responsibility principle) OCP : 개방-폐쇄 원칙 (Open/closed principle) LSP : 리스코프 치환 원칙 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (Interface segregation principle) DIP : 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙 Single responsibility principle 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 ..
?name=euichan
나의 개발일지