전체 글

· 개발
-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라는 메서드가 많이 필요하게 되고 클래스마다 메서드를 추가하게 되고ReviewService에서 MemberRepository를 의존하게 된다...
· 개발
스프링 부트의 validation을 그래들로 받으면 @NotBlank@NotNull@NotEmpty@Email등등 여러 검증 어노테이션을 사용할 수 있다. 그래서 비어있으면 안 되는 값에 @NotBlank를 달아줬는데 밑에 에러가 떳다.  좀 더 찾아보니까 @NotBlank는 빈 값 까지 검증하기 때문에 String 형식에만 사용하고Boolean은 @NotNull을 사용하면 된다.
· 개발
프로젝트를 진행하면서 마이페이지에서 내가 쓴 리뷰를 조회하는 기능을 하고있었다. 내가 쓴 리뷰에는 이미지도 포함되어 있는데, 리뷰와 이미지가 1 : N 관계에 fetch = FetchType.LAZY 전력을 사용하고 있었다. 이미지 까지 조인해서 가져오기에는 한 번에 너무 많은 조인이 필요하다고 판단되고 중복된 행이 나타날 수 있어 분리를한 후 이미지를 따로 가져와서 dto에 따로 넣어주기로 했다.문제 코드  따로 넣어주고 있는데 이미지의 갯수 + 1 개의 쿼리문이 날라갔다평소 N + 1 문제에 대해 인식하고 있었지만 대부분의 쿼리는 Querydsl의 프로젝션을 사용해서 발생하지 않았다.또한 묵시적 조인을 사용했기 때문에 문제가 된다고 생각하지 못 했다. 하지만 여기서는 프로젝션을 사용하지 않고 개별쿼리..
· 개발
Docker 데몬이 실행 중이 아니거나 Docker 클라이언트가 데몬에 접근할 수 없을 때 발생. Docker 데몬이 실행중인지 확인하기 위해"docker info" 로 확인 하였다. 확인 결과 실행이 안 되어 있어 발생한 것으로 추정된다. Docker Desktop을 사용하고 있기 때문에 Docker Desktop을 재시작 해주니까 해결되었다.
교착상태 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해 다음 처리를 하지 못하여 무한히 다음 자원을 기다리는 상태를 말한다. 시스템적으로 한정된 자원을 여러 곳에서 사용하려 할 때 발생한다.   데드락이 일어나는 경우 Thread2는 A를 점유하고 있으면서 B의 자원을 요청, B의 자원을 습득할 때 까지 대기Thread3는 B를 점유하고 있으면서 A의 자원을 요청, A의 자원을 습득할 때 까지 대기서로 상대방이 자원을 내놓기를 바라면서 무기한 연기에 빠지는 상황현재 서로 원하는 자원이 상대방에 할당되어 있어서 두 프로세스는 무한정 wait 상태에 빠진다.   데드락 발생 조건 데드락은 4가지 조건이 모두 성립해야 발생한다.(하나라도 성립하지 않으면 데드락 문제를 해결할 수 있다) 상호 배제자원..
백수왕
비전공자에서 주니어 개발자까지