· 오늘 공부한 것

기술면접 2개

모집글 수정 리팩토링

모집글 삭제 구현

이미지 s3에 업로드 적용

 

 

· 공부한 내용, 궁금한 내용, 부족한 내용

  1. TCP/UDP에 대해서 설명해주세요.
    • TCP와 UDP의 신뢰성 차이가 어떤 프로세스 떄문에 발생하는지 3-way handshaking
  2. http, https 차이점에 대해 설명해주세요
    • HTTP/HTTPS의 정의와 차이점 SSL 인증서를 통해서 데이터 조작여부 판단

어제 구현한 모집글 수정기능에서 생성기능과 겹치는 코드가 있어서 따로 메서드를 만들어 리팩토링과정을 거쳤다. 또한 validation을 추가해서 postId값에 대한 모집글 데이터의 존재유무를 판단하였다. 그리고 우리는 예외처리할 때 코드 부분에서 우리끼리 정의한 코드넘버와 에러메세지를 사용하였다. 그래서 모집글 관련 처리는 4000번대에서 하기로 했다. 따로 응답에서 StatusCode가 있겠지만 프로젝트 진행하는 팀원끼리 예외처리 코드를 정해서 하면 해당 코드가 무엇을 말하는지 확실히 알 수 있었다. 간단히 말하자면 세분화해서 커스텀하여 사용하기로 한 것이다. 이미지 업로드 부분에서는 기존에 서버에 이미지파일을 저장하는 방식이 아닌 aws s3에 이미지를 업로드해서 해당 URL을 받아오는 것으로 리팩토링하였다. s3에 업로드하고 수정, 삭제하는 부분은 다른 팀원이 설정을 해주셨고 나는 설정해주신 것을 가지고 사용하기만 하면 되었다. 그래도 s3에 이미지 업로드하는 방식을 학습하였다.

public interface JobLimitRepository extends JpaRepository<JobLimit, Long> {

    @Modifying
    @Query("DELETE FROM JobLimit jl WHERE jl.post.postId = :postId")
    void deleteAllByPostId(@Param("postId") Long postId);
    
    void deleteByPostPostId(Long postId);
}

모집글 관련 entity인 jobLimit을 다룰 때 해당 레포지토리에서 사용한 jpa query문인데 처음에 위에 사용한 거처럼 직접 쿼리문을 작성해야지 제대로 작동을 하였다. 하지만 간단하게 쿼리메서드명을 명확하게 바꾸니까 똑같이 작동을 하였다. 역시 명칭 붙이는 일이 가장 어려운거 같다.(변수명...., 메소드명....)

 

    private void savePostStackAndJobLimit(
            List<Skill> skills, List<JobLimit> jobLimitList, Post post) {
        List<PostStack> postStacks = new ArrayList<>();
        skills.forEach(
                skill -> {
                    postStacks.add(PostStack.builder().skill(skill).post(post).build());
                });
        postStackRepository.saveAll(postStacks);

        // 저장된 post로 jobLimit에도 저장
        List<JobLimit> jobLimits = new ArrayList<>();
        jobLimitList.forEach(
                jobLimit -> {
                    jobLimits.add(
                            JobLimit.builder()
                                    .job(jobLimit.getJob())
                                    .headcount(jobLimit.getHeadcount())
                                    .post(post)
                                    .build());
                });
        jobLimitRepository.saveAll(jobLimits);
    }

모집글 작성과 모집글 수정 부분에서 겹치는 코드를 따로 메서드로 빼놓은 것이다. 수정할 때도 모집글 관련 postStack과 jobLimit 정보들을 삭제하고 다시 받아온 값으로 저장하는 과정을 거치기 때문에 모집글 작성기능과 겹치는 것이다. 만약 수정할 때 set이나 update메서드를 만들어서 기존의 데이터를 직접 수정하는 방식이었다면 겹치지 않았을 것이다. 하지만 처음 시작할 때 코드 컨벤션으로 entity데이터의 수정할 때 setter를 사용하지 않기로 했기때문에 로직이 이렇게 만들어졌다.

그리고 수정, 삭제일 경우에는 response로 빈객체를 보내주기로 했는데 처음 코드를 구현했을 때는 null값으로 보냈다. 하지만 팀원의 코드리뷰를 통해서 빈객체로 하는게 좋을 거 같다하여 바꾸었다. 처음에 PostUpdateRes를 빈 객체로 만들어서 사용했는데 오류가 났었다. 그래서 찾아보니 직렬화 관련 오류였다. 해결 방법은 @JsonIgnorProperties 어노테이션을 달아주면 되는 것이다. 이것은 

· 오늘 서칭 한 자료

https://techblog.woowahan.com/11392/

 

Spring Boot에서 S3에 파일을 업로드하는 세 가지 방법 | 우아한형제들 기술블로그

Spring Boot에서 S3에 파일을 업로드하는 세 가지 방법 | 안녕하세요. 세일즈서비스팀에서 전자계약서 시스템을 개발하고 있는 박민규입니다. 최근 저는 Spring Boot + Kotlin을 활용한 프로젝트에서

techblog.woowahan.com

 

 

· 느낀 점

 

반응형

+ Recent posts