일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 우테코
- mock
- AOP
- 자바
- REDIS
- Level2
- AWS
- 스프링부트
- 백준
- 우아한테크코스
- 프리코스
- 코드리뷰
- 세션
- JUnit5
- Paging
- 서블릿
- 우아한세미나
- 미션
- 프로그래머스
- 스프링 부트
- HTTP
- CircuitBreaker
- yml
- Spring Batch
- MSA
- 레벨2
- 의존성
- JPA
- Docker
- 트랜잭션
- Today
- Total
목록전체 글 (159)
늘

ResponseEntity의 body에 객체를 넣고 보내주면 json형식으로 주고받아진다. @Controller public class HelloController { @GetMapping(path = "/hello") public ResponseEntity hello() { MoveDto moveDto = new MoveDto("start", "finish"); return ResponseEntity.ok(moveDto); } } @Controller를 통해서 Json이 반환되는 현상이 발생했습니다.. 흔히들 알기론 controller는 데이터를 Model에 담고 반환할 view를 찾는 방식이고 restController는 단순히 json형식의 데이터만 주고받는 것으로 알고 있습니다. 그리고 RestC..

@RequestBody @RequestBody 애너테이션의 역할은 클라이언트가 보내는 HTTP 요청 본문(JSON 및 XML 등)을 Java 오브젝트로 변환하는 것이다. 기본 생성자만을 가지고 json값을 Java객체로 변환해준다. MappingJackson2HttpMessageConverter 내부의 ObjectMapper를 통해 json값을 Java객체로 역직렬화를 한다. 직렬화가 가능한 클래스들은 기본 생성자가 항상 필수입니다. 즉, ObjectMapper를 통해 역직렬화가 이루어지므로 기본 생성자가 필수라는 말이다! 그렇다면 기본 생성자만을 보고 어떻게 필드를 알고 매핑을 해주는 것일까? Jackson ObjectMapper는 Java 오브젝트의 필드에 맵핑할 때 getter혹은 setter매서드..

우테코 강의 시간에 차이점에 대해 알아봤었는데 다 까먹고...매번 볼때마다 다시 찾아보는 것 같아서 정리해두려고 한다.🙂 자바에는 크게 두 가지 Exception 종류가 있다. checked Exception과 unchecked Exception이다. checked Exception checked Exception은 RuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스들이다. Compile Exception으로도 불리며 반드시 예외 처리를 해줘야 한다. 주로 예외를 활용해서 다른 작업을 할 때 사용된다. 예시로 IOException, SQLException이 있다. 예외 발생시 트랜잭션이 롤백 해주지 않는다. unchecked Exception RuntimeExc..

테스트 더블 더블이란: 할리우드에서 배우들의 대역을 해주는 사람을 더블이라고 한다. 그래서 말 그대로 테스트할 때 실제 도메인(주연)을 사용하지 않고 Double(대역)을 사용해서 테스트를 한다고 생각하면 된다. 테스트 더블에는 크게 위와 같이 Dummy, Stub, Spy, Mock, Fake로 나눠진다. Dummy 인스턴스화 하여 구현한 가짜 객체 기능 구현이 안돼있다. Stub dummy를 이용하여 실제로 동작하는 것처럼 보이게 만드는 객체 기능 구현이 안돼 있다. 상태 검증을 위한 객체이다. 상태 검증이란 메서드가 수행된 후, 객체의 상태를 보며 올바르게 동작했는지 확인한다는 뜻입니다. 객체를 다양한 조건으로 값을 만들어주고 던져줘도 항상 동일한 값을 반환 Spy 스파이처럼 기록을 하는 역할을 가..

테스트 코드 @DisplayName()을 사용하면 아스키코드 warning이 안뜨므로 운영할떄 로고가 안찍혀서 좋다. 리펙토링을 할때는 기존의 테스트 코드가 깨지지않도록 해야한다! private 매서드 테스트할떄 로직을 테스트 코드 작성하는 곳에 가져와서 테스트를 돌려본다.. JDK11 타입 추론 final을 붙여서 타입 불변으로 해주는게 좋다. 뭐든 커지면 의심하자 패키지가 커지면 응집도에 관해 의심해보고, 매서드가 커지면 단일책임 원칙에 대해서 의심해보자... Static 언제 사용하는게 좋나? util 클래스와 같은 곳 , 상태관리를 안해도 되므로, 생성자를 private으로 하여 인스턴스화를 막기도 한다.(util이라는 것을 명확히 보여주기 위해) 값을 비교할 때, 이상? 초과? 어떤 방식을 이용..

Level 1의 마지막 미션으로는 체스 미션을 진행했다. 1단계에서는 콘솔 창에서 명령어를 입력해서 체스 게임을 할 수 있도록 구현했다. 2단계에서는 1단계에서 작성했던 도메인을 기반으로 자바 spark로 jdbc를 이용해 db와 연동되도록 구현했다. 1. 상황에 적절한 예외를 던지자. 이펙티브 자바에 의하면 IllegalArgumentException은 허용하지 않는 인수가 들어오는 경우 IllegalStateException은 객체가 메서드를 수행하기에 적절하지 않은 상태인 경우 UnsupportedOpertionException 은 호출한 메서드를 지원하지 않을 때 사용한다. 위 코드는 한 번 override된 메서드이므로 UnsupportedOperationException보다는 IllegalSt..

평소에 runtimeOnly는 런타임 때 작동하겠지, implementation은 gradle이 돌아갈 때부터 작동하겠지라고 대충 생각하고 넘겨와서 그런지 막상 퀴즈를 받으니 대답을 못하겠다.. 이번 기회에 공부하고 정리해보려고 한다. 일단 gradle에 의존성부터 확인해 보았다. 일단 눈에 띄었던 것은 빨간 박스로 표시한 것처럼 runtimeClasspath에 implementation으로 선언된 의존성 파일들이 들어있었다. 대충 implementation은 시작부터 runtime때까지 의존성이 살아있는구나(?)라고 생각했다. CompileClasspath 에러 없이 컴파일을 하기 위해 필요한 클래스와 jar들의 위치를 나타낸다. compileClasspath만 잘 설정했다고 애플리케이션이 잘 작동하는..
우테코 나와 맞을까? 옷을 멀리서 보기만 해서는 나와 사이즈가 맞는지 알 수 없다. 직접 입어 보기 전까지는 모른다. 처음 우테코를 지원할 때만 해도 전공자이고 스프링 공부도 하고 있었기 때문에 쉽게 적응할 것이라고 생각했다. 하지만 1단계, 2단계 미션이 진행될수록 여유로움은 점점 사라지고 안일했던 나를 반성하게 되었다. 나에게 작아 보였던 우테코라는 옷은 나에게 맞지 않은 큰 옷처럼 보였다. 맞지 않은 옷 초등학교시절 엄마와 옷을 사러 가면 엄마는 항상 소매보다 긴 옷을 사 입혔다. 그때는 왜 옷을 크게 사주는지 몰랐지만 지금은 알 수 있다. '유년기 시절에는 빠르게 성장하기 때문에 미리 큰 옷을 사 입힌 것이었다.' 처음 ot를 시작으로 메타버스에서의 활동, 보이는 라디오, 온라인 회식, 페어 프로..

1. 자료구조를 사용하자 여러 값들을 담을 때 생각없이 매번 List를 쓰는 버릇을 고쳐야겠다. 적절한 자료구조를 사용하면 코드가 많이 줄여지고 깔끔해진다. 2. 정적 팩토리 매서드 네이밍 정적 팩토리 메서드 명명 규칙 from : 매개변수 하나를 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드 ex) Date date = Date.from(instant); of : 매개변수 여러개를 받아서 적합한 타입의 인스턴스를 반환하는 집계 메서드 ex) Set cards = EnumSet.of(JACK, QUEEN, KING); valueOf : from과 of의 더 자세한 버전 ex) BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE); instance o..

자바를 사용하다보면 List를 만드는데 여러가지 방법들을 사용해왔었다. 그 차이를 모르고 손에 익히는대로 사용했는데 이번에 정리를 하려고 한다. import java.util.ArrayList; // new ArrayList() import java.util.Arrays; // Arrays.asList() import java.util.List;// List.of() 차이점 1. 원소를 추가/삭제할 수 있나? 원소를 추가/삭제 set 사용 가능 new ArrayList() 가능 가능 Arrays.asList() 불가능 가능 List.of() 불가능 불가능 ArrayList()에 List값을 하나만 넣으려면 List.of()를 감싸서 넣으면 된다. 그렇지 않고 List.of()로 한 후 add를 하면 아래..