전체 글

· 개발
PREVIEW이전 프로젝트에서 Spring Security를 전담하지 않았고, 사용자의 권한이 필요한지 확인하거나 로그인한 사용자의 정보를 가져올 때 @AuthenticationPrincipal 어노테이션을 사용.이 방식은 프로젝트 진행 자체에는 문제가 없었지만, 사용자의 권한만 확인하면 되는 상황에서도 사용자의 정보를 전체적으로 불러오는 문제가 있다.@AuthenticationPrincipal 특성상 로그인하지 않은 사용자에 대해 에러를 반환하지 않고 사용자의 정보를 가져오고, 로그인하지 않았을 경우 null로 주입이 된다.또한 해당 정보를 기반으로 DB에 접근하여 ID가 존재하는지 조회하고, 존재할 경우 권한이 있는지 확인을 하게된다.이렇게되면 로그인하지 않아도 서비스 계층과 데이터베이스까지 접근하고..
· 개발
이번 프로젝트에서는 패키징과 기본 설정 및 entity 클래스 정의 등을 맡게 되었다. 평소처럼 연관관계가 필요한 컬럼에는 @ManyToOne과 @JoinColumn으로 외래키를 지정해 주었다. 모든 entity를 정의하고 나서 테이블과 컬럼이 잘 생성되는지 테스트겸 ddl = create로 설정해두고 서버를 실행했는데 Caused by: org.hibernate.MappingException: Column 'users_id' is duplicated in mapping for entity 에러가 떳다. 먼저 직역을 해보면 users_id가 중복되어 매핑되었다고 한다. 생각해보면 데이터베이스랑 1:1매핑을 해주기 때문에 당연한 일인데 패키징에 집중하다보니 놓치고 있었다.또한 @JoinColumn의 nam..
· 개발
-i (--inventory-file) 적용될 호스트들에 대한 파일 정보를 나타낸다 인벤토리 옵션을 사용하지 않을 경우 호스트 파일에 작성해둔 정보 사용를 사용한다(나같은 경우 vi옵션으로 /etc/ansible/hosts 파일 안에 적용될 ip등록 -m (--module-name) 모듈 선택ex) ansible all -m -ping -> 모든 그룹에 모듈 적용       ansible all -m copy -a "src=./test.txt dest=/tmp" -> test.txt 파일을 모든 원격 서버의 /tmp 디렉터리에 복사 -k (--ask-pass) 관리자 암호 설정 사용자 암호를 입력받기 위한 옵션으로 원격 서버에 접속할 때 SSH 비밀번호를 요구하도록 설정한다.SSH 키 대신 비밀번호로 접..
Intro2022년 10월, 나는 첫 코딩을 시작했다.군대 선임의 추천으로 그냥 재미 삼아 약 한 달간 남는 시간에 C언어를 공부했지만, 그것을 직업으로 삼겠다는 생각은 없었다.그렇게 다른 일을 하며 시간을 보내던 중, 단순 반복의 일상이 지겨워 개발자라는 꿈에 진지해졌고, 결국 2023년 3월, 제대로 공부해 보자는 결심을 하게 되었다.개발에 재능이 있는 것인지 아니면 살면서 느껴보지 못한 뿌듯함과 신선한 재미에 중독이 된것인지 진짜 열심히 했다 자부한다. 하지만 그 재미도 3개월밖에 가지 않았고, 딱 3개월 만에 큰 정체기가 다가왔다.Java라는 언어와 Spring, JPA를 3개월간 누구보다 열심히 했다고 자신할 수 있지만, 어떤 것을 해야 할지, 내가 개발자로 취업할 수 있을지에 대한 엄청난 고민..
· 개발
배포 자동화를 진행하면서 너무 많은 삽질이 있었다.배포 자동화를한 후 2주정도 지났는데 에러가 뜨지 않고 잘 돌아간다.기록하지 않으면 또 똑같은 삽질로 시간을 낭비할 수 있기 때문에 복습할겸 기록을 해본다. 도입 배경프로젝트 일정 중 기능 구현이 끝나면 리팩토링이나 새로운 기술 도입 전에 배포를 하기로 했다.배포를 하고나서 리팩토링이 진행되면 계속 버전업을 해줘야 하는데 그렇게 되면 배포해야 할 일이 잦아진다.그래서 젠킨스와 네이버클라우드를 활용하여 배포 자동화를 도입하기로 했다. 젠킨스와 네이버클라우드 선택 이유먼저 젠킨스를 선택한 가장 큰 이유는 다른 CI를 위한 툴과는 다르게 오픈소스 툴이라는 장점과 그런 이유에서인지 방대한 커뮤니티가 존재하여 배포를 진행하는 데 있어 정보가 많다고 생각했기 때문이..
· 개발
프로젝트를 진행하면서 검증이 필요할 때가 많다. 예를들어 DB에 진짜 있는 값인지 또는 바로 밑에서 언급할 가입 회원의 탈퇴 상태값 등이 있다.내가 진행한 프로젝트의 경우 회원이 탈퇴하면 로우 자체를 삭제하는 것이 아니라 is_deleted 라는 컬럼의 상태값만 바꿔준다.그래서 JPA에서 제공하는 findById를 써도 is_deleted가 true인 값까지 가져오게 된다. 그래서 검증 메서드를 MemberService에 밑에 사진처럼 만들어놨다 MemberService 자체에서만 사용하게 된다면 문제가 없다 문제 하지만 ReviewService나 StoreSevice같은 다른 클래스에서 사용하게 된다면 getMember라는 메서드가 많이 필요하게 되고 클래스마다 메서드를 추가하게 되고ReviewServ..
· 개발
스프링 부트의 validation을 그래들로 받으면 @NotBlank@NotNull@NotEmpty@Email등등 여러 검증 어노테이션을 사용할 수 있다. 그래서 비어있으면 안 되는 값에 @NotBlank를 달아줬는데 밑에 에러가 떳다.  좀 더 찾아보니까 @NotBlank는 빈 값 까지 검증하기 때문에 String 형식에만 사용하고Boolean은 @NotNull을 사용하면 된다.
· 개발
프로젝트를 진행하면서 마이페이지에서 내가 쓴 리뷰를 조회하는 기능을 하고있었다. 내가 쓴 리뷰에는 이미지도 포함되어 있는데, 리뷰와 이미지가 1 : N 관계에 fetch = FetchType.LAZY 전력을 사용하고 있었다. 이미지 까지 조인해서 가져오기에는 한 번에 너무 많은 조인이 필요하다고 판단되고 중복된 행이 나타날 수 있어 분리를한 후 이미지를 따로 가져와서 dto에 따로 넣어주기로 했다.문제 코드  따로 넣어주고 있는데 이미지의 갯수 + 1 개의 쿼리문이 날라갔다평소 N + 1 문제에 대해 인식하고 있었지만 대부분의 쿼리는 Querydsl의 프로젝션을 사용해서 발생하지 않았다.또한 묵시적 조인을 사용했기 때문에 문제가 된다고 생각하지 못 했다. 하지만 여기서는 프로젝션을 사용하지 않고 개별쿼리..
백수왕
비전공자에서 주니어 개발자까지