[웹 자동차 경주] 배운 것 정리
·
우아한테크코스 5기/미션 피드백 정리
1. 스프링 테스트에서 Junit5는 의존성 관리를 해주지 않는다. 스프링 테스트 시 @Autowired 어노테이션이 없으면, 의존성 주입을 해주지 않는다. 프로덕션 코드에서는 생성자 주입 시 @Autowired 어노테이션이 없어도 자동으로 스프링이 주입을 해줬다. 따라서, 테스트 코드에서도 생성자 주입 사용 시 @Autowired 어노테이션이 없어도 자동으로 주입될 줄 알았다. 하지만, 테스트 환경에서는 생성자 주입 시 스프링 IoC 컨테이너에서 스프링 빈을 찾는 것이 아니라, 생성자 매개변수 관리를 Jupiter가 하기 때문에 Jupiter에게 생성자 매개변수 관리를 처리할 ParameterResolver에게 요청을 보낸다. 하지만 해당 빈은 스프링 IoC 컨테이너가 가지고 있기 때문에 찾지 못해 에..
[아키텍쳐] Service, Repository가 왜 필요할까?
·
아키텍쳐
🎯 0. 주제 선정 이유 하나의 애플리케이션을 만들 때 자연스럽게 Controller, Service, Repository, Dao를 나누고 시작하는 경우가 많았다. Controller는 HTTP 요청 및 응답을 처리하는 가장 앞 단이기 때문에 자연스럽게 존재해야했고 Dao는 DB와 연결해서 데이터를 영속화하기 위해 필요한 것이 자연스러워보였다. 하지만, Service와 Repository는 왜 필요한지 이유를 정확히 알지 않고 관성적으로 쓰는 경우가 많았다. 그래서 Layered Architecture를 공부한 지금, 왜 Service, Repository가 필요한지 내 생각을 정리해보려고 한다. 우테코 미션에서 경험해보면서 생긴 나의 생각을 정리해보겠다! (주관적인 내용이라 틀린 부분이 있을 수 있다..
[아키텍쳐] Layered Architecture란? (feat. 자동차 경주 미션 예시)
·
아키텍쳐
🎯 1. Layered Architecture란? Layered Architecture : 계층화 아키텍쳐 Layered Architecture는 어느 하나의 프레임워크에 종속적인 개념이 아니라 소프트웨어 개발에서 일반적으로 흔히 사용되는 아키텍쳐의 개념이다. Layered Architecture는 각 구성 요소들이 '관심사의 분리(Separation of Concerns)'를 달성하기 위해 '책임'을 가진 계층으로 분리한 아키텍쳐이다. 관심사의 분리 : 책임(관심사)을 기준으로 다른 책임(관심사)를 분리하는 것 ※ 그렇다면, 관심사의 분리를 왜 할까? 하나의 계층에 관심사가 여러개가 존재한다면 해당 계층의 응집도가 떨어지고 결합도가 높아진다. 각 계층들을 관심사 기준으로 분리함으로써 계층의 응집도를 ..
[DB] 트랜잭션이란? (feat. ACID 특성)
·
DB
🎯 1. 트랜잭션이란? 💡 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위이다. 👉DB의 상태를 변경시킨다는 것은 INSERT, UPDATE, DELETE, SELECT SQL문을 실행하는 것이다! 이때, 작업 단위는 하나의 SQL문이 아닐 수 있다. ⚙️ 작업 단위 예시 사용자가 계좌에 입금을 진행한 후에 입금 후 금액을 보는 예시를 생각해보자. 설계 시 사용자가 금액을 입금하는 UPDATE -> 금액 조회 SELECT 문으로 설계할 것이다. 이때, 작업 단위는 금액을 입금하는 UPDATE -> 금액 조회 SELECT 문이다. 따라서 2개의 SQL문이 하나의 트랜잭션으로 구성되는 것이다. 이처럼 하나의 SQL이 아닌 여러 SQL문이 하나의 트랜잭션으로 구성될 수 있다. 🎯 2. 트랜잭션의 성질..
[Spring] 스프링 HTTP API 요청 & 응답 시 역직렬화 직렬화 원리
·
Spring
🎯 0. 역직렬화 & 직렬화란? 이론적인 직렬화, 역직렬화는 다음과 같다. * 직렬화 : 메모리를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것 * 역직렬화 : 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것 일반적으로 스프링 HTTP 요청 / 응답 과정에서의 직렬화, 역직렬화를 생각해보면 다음과 같다. * 직렬화 : 자바 객체를 Byte, CSV, JSON, XML 등 네트워크 통신을 위한 다양한 포맷으로 변환하는 것! 주로 자바 객체 -> JSON을 사용한다. * 역직렬화 : 네트워크 통신으로 받은 Byte, CSV, JSON, XML 등 다양한 포맷을 자바 객체로 변환하는 것! 주로 JSON -> 자바 객체를 사용한다...
[Spring] @ResponseBody VS ResponseEntity<T> : 무엇을 사용할까?
·
Spring/기타
🎯 1. Spring HTTP 응답 메시지 바디에 메시지를 설정하는 방법 HTTP 응답 메시지 바디에 메시지를 설정하는 방법은 다음과 같이 2가지가 존재한다. 반환 시 ResponseEntity 사용 @ResponseBody + 반환 객체 사용 1. ResponseEntity 예제 @PostMapping("/plays") public ResponseEntity registerRaceResult(@RequestBody final GameInfoRequest gameInfoRequest) { ... } 2. @ResponseBody + 반환 객체 사용 예제 @PostMapping("/plays") @ResponseBody public RaceResultResponse registerRaceResult(@Re..
[Spring] JdbcTemplate 스프링 빈은 어떻게 자동으로 등록될까?(feat.DataSource)
·
Spring/기타
❓ 해당 주제를 찾아본 이유 JdbcTemplate을 쓸 때 여러 구글링을 통해 사용 방법을 알아보게 되었다. 대부분의 사람들이 JdbcTemplate 을 주입받아서 사용하는 것이 아니라, DataSource 를 주입받아서 JdbcTemplate 객체를 생성해서 사용했다. private final JdbcTemplate jdbcTemplate; @Autowired public RaceResultDao(final DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } 처음 든 생각은 '왜?' 였다. JdbcTemplate 이 스프링 실행 시에 스프링 빈으로 자동으로 등록되어 있다면 DataSource 를 의존성 주입하는 것이..
함수형 인터페이스의 정의 & 사용 예제
·
우아한테크코스 5기/학습 로그
🎯 1. 함수형 인터페이스의 정의 추상 메소드를 단 하나만 가지고 있는 인터페이스 default 메소드 & static 메소드를 여러개 가지고 있더라도 추상 메소드가 하나면 함수형 인터페이스이다. @FunctionalInterface public interface Predicate { boolean test(T t); } ※ @FunctionalInterface 해당 인터페이스가 함수형 인터페이스임을 선언하는 어노테이션 해당 어노테이션이 없더라도, 추상 메소드가 하나이면 함수형 인터페이스로 동작한다. 👉 그렇다면, 왜 @FunctionalInterface를 사용할까? @FunctionalInterface 어노테이션이 있으면, 추상 메소드가 2개 이상이면 컴파일 오류를 발생시킨다. 따라서, 검증 및 유지 ..
우아한테크코스 5기 레벨1 인터뷰 회고 & 피드백 정리
·
우아한테크코스 5기/회고
0. 들어가기 전 어제 우테코 레벨1 레벨 인터뷰를 진행했다! 제이슨 코치 조에 속해서 엄청난 풀스윙으로 맞았다 ㅎㅎ 😎 다음에 안 맞기 위해 맞은 기록들을 정리해보고자 한다 😂 🎯 1. 답변하지 못한 부족했던 개념 정리 ✅ 1-1. 동일성과 동등성 equals & hashCode를 함께 정의해야 하는 이유는? hashCode를 재정의 하지 않으면 어떤 문제가 발생할까요? 동일성과 동등성의 차이는 무엇이고, 어떻게 사용해야 하나요? ✅ 1-2. 객체 생성 비용 객체 생성 비용의 부담감을 느껴본 적이 있나요? 이로 인해 메모리 측면에서 효율적으로 하기 위한 시도를 해봤나요? 매번 인스턴스를 생성하는 것과 ‘캐싱’시 메모리 측면에서 어느정도의 효과가 있는지 체험해보기 🎯 2. 학습 측면 피드백 ✅ 2-1. ..
우아한테크코스 5기 4주차 체스 미션 감정 회고
·
우아한테크코스 5기/회고
0. 들어가기 전 미션 피드백이 아닌 감정 회고는 1주차 자동차 경주 미션 이후로 오랜만인 것 같다. 너무 바빠서 미션에 사용한 것들에 관해 적을 시간이 없어서 감정 회고를 하는 것은 아니다 ㅎㅎ (맞을지도) 이번 미션은 역대급으로 바빴던 것 같다. 나는 시간 박치기를 많이하는 타입이라서 항상 시간이 부족하기는 하지만 이번엔 달랐다. 이전 미션들에서는 구현을 완성하고 리뷰어의 피드백을 받아 리팩토링하는 과정에서 시간이 부족했다면, 이번 체스 미션은 구현을 완성하는 데까지만 해도 시간이 부족했다. 그래서 이러한 역대급 체스 미션을 끝내고(아직 끝낸 건 아니지만...) 느낀 감정들을 3L 포맷을 통해 회고하고자 한다. (감정 회고에 맞는 포맷은 아닌 것 같긴 한데, 일단 해본다) 🎯 1. 나는 무엇을 좋아하..
BE_성하
성장하는 성하 Blog