단순 CRUD는 그만! 웹 백엔드 시스템 구현(Spring Boot) 15기 참여 후기입니다.
1주차 수업 내용
스프링 프레임 워크
객체 라이프사이클, 의존관계 컨트롤
스프링 웹 MVC
서블렛, 서블렛 컨테이너, 애플리케이션 컨텍스트의 계층별 분리
작성 포스팅 스프링 프레임 워크, 스프링 웹 MVC , 서블렛 컨테이너
배운점
1.테스트용 레포지토리 관리
데이터베이스가 아닌 자바 자료구조 API를 사용한 메모리 레포지토리
@Repository
public class TestUserRepository implements UserRepository {
private static Long seq = 1L;
private static Map<Long, User> users = new HashMap<>();
public void autoincrement() {
seq++;
}
public void clear(){
users.clear();
seq = 1L;
}
public int getSize(){
return users.size();
}
@Override
public void save(User user) {
User saveUser = new User(seq, user.getEmail(), user.getPasswd(), 0, null, LocalDateTime.now());
users.put(seq, saveUser);
autoincrement();
}
@Override
public Optional<User> findBySeq(Long seq) {
return Optional.ofNullable(users.get(seq));
}
@Override
public Optional<User> findByEmail(String email) {
return users.values().stream().filter(user -> user.getEmail().equals(email)).findAny();
}
@Override
public List<User> findAll() {
return new ArrayList<>(users.values());
}
}
2. 협업을 위한 공통 응답 DTO 설계에 대한 고민
요청 성공시, 실패시 클라이언트에게 어떤 값을 넘겨줄 것인가?
@Getter
public class BaseResponse<T> {
private final Boolean success;
private final T response;
private BaseResponse(Boolean success, T response) {
this.success = success;
this.response = response;
}
public static <T> BaseResponse<T> ofSuccess(T response) {
return new BaseResponse(true, response);
}
public static <T> BaseResponse<T> ofFail(T response) {
return new BaseResponse(false, response);
}
}
2주차 수업 내용
스프링 시큐리티 인증, 인가 흐름
본 스터디 전 개인 프로젝트를 진행하며 스프링 시큐리티를 세션방식으로 구현하면서 꽤 공부했어서 가장 얻는게 많은 주차였음
작성 포스팅 스프링 시큐리티 인증/인가 흐름, 세션과 토큰의 차이
배운점
1. JWT토큰 적용하는 인증 커스텀
2. AccessDecisionManager, Voter를 활용해 이전 프로젝트에서 cotroller에서 구현했던 부분들을 메인 로직밖으로 꺼낼 수 있음
3. FilterSecurityInterceptor필터에서 걸리는 예외들을 ExceptionTranslationFilter가 throws, 해당 예외들을 따로 핸들링 가능
3주차 수업내용
API 문서 자동화 프레임워크
Validation 체크
작성 포스팅 레이어별 DTO/ Validation
배운점
1. validation 체크를 위해 어떤 기능을 사용하는가보다 어디에서 수행해야 좋을까에 대한 고민
2. JPA를 사용해서 엔티티의 각 필드, 컨트롤러의 @Validation 들이 자동으로 해줘서 별 고민없이 사용했는데 내가 쓰는 어노테이션이 어떤 일들을 수행하는지에 대한 이해를 하고 사용해야겠다는 생각을 가진 주차
4주차 수업 내용
AWS S3, Jasypt, 예외로깅, CompletableFuture를 통한 비동기 프로그래밍
작성 포스팅 Java 쓰레드
배운점
1. 네트워크 통신할 때는 항상 예외발생을 염두에 둘 것
2. 멀티쓰레드를 활용한 자바 비동기 프로그래밍
전공수업 들을 때도 ExecutorService로 만든 쓰레드풀에서 반복문 돌리고 시간재는 것 외에 쓰레드를 만져본적이 없었는데, 메인 로직처리 중 네트워크 데이터 전송, 로컬 시스템에 자원 읽기 쓰기 같은 로직은 메인 쓰레드에서 분리해 비동기 처리를 경험해볼 수 있었다. 비동기 처리가 필요한 필드는 데이터베이스 스키마를 설계할 때 부터 고려해야겠다는 생각을 하게됐다.
예를 들어 회원 가입시에 프로필 이미지 같은 필드는 이름, 아이디, 비밀번호 같은 회원정보보다는 중요도가 낮지만, 데이터가 꽤 크다.
회원 가입 요청 시에 다른 회원정보는 요청사항에 올바르지만, 프로필 이미지가 깨지거나 안보내서 다시 회원가입에 필요한 데이터를 사용자에게 요청하는 좋지 않은 사용자 경험보다는 일단 회원가입을 시키고, 프로필 이미지는 추후에 업데이트를 하는 방식을 고려해야한다.
5주차 수업 내용
도메인 이벤트, 이벤트 버스, WebPush, Apach Kafka
뭣도 모르고 졸업작품을 MSA로 고도화시키겠다는 생각을 갖고 있었다가 책을 읽으면서 포기했던 때가 생각이 난다. 해당 주차의 이론은 이해가 갈랑말랑한데, 과제는 너무 어렵고 이해하는데 시간이 오래 걸릴 것 같다.
후기
5주에 45만원 스터디에 투자한 이유
1. 현업자 코드리뷰
2. 꽤 비싼 돈 내고 참가했기에 활동적일 것 같은 스터디일 것 같은 느낌
3. 이름부터 단순 CRUD는 그만!에서 뼈맞아서
스터디 후기
1. 공부했던 부분에서는 정말 많은 것을 얻었고 실무를 경험해본적 없는 개발자 지망생으로써 안해본 고민들을 해볼 수 있었다.
2. 스터디 현업자 리더 두분이서 파트를 나눠 강의 및 코드리뷰를 해주시는데 라이브 강의이기 때문에 모르는 것들은 바로바로 질의응답이 가능하다.
3. 스터디 기수마다 상이하겠지만 내가 참여한 기수는 스터디원끼리의 교류는 전혀없었고 커리큘럼에 써있는 키워드들을 대충 뭔지만 알고있거나 처음본다면 과제를 따라가기 힘들다. (스터디원은 스무명이 넘지만 과제제출 풀리퀘스트는 그 절반정도)
4. 돈값을 하는지는 현재 취준생인 상태에서는 잘모르겠지만 라이브 강의 녹화영상 및 강의자료들은 영구적으로 볼 수 있고, 백엔드 개발에 대한 건 해당 강의 내용이 아니여도 질문에 대한 답변 및 참고자료는 꽤 도움이 될 것 같다.
커리큘럼에 있는 것들을 적용해봤지만 그것들에 대한 기초를 모른다하면 필자보다 얻는게 많을 것 같다.