미션 1, 2단계에에ㅔㅔㅔㅔㅔㅔㅔㅔㅔ 제출한 걸로 만족합니다.
톰캣... 이런 일들을 대신 해주고 있었구나. 정말 고맙다.
난 시간이 부족해서 handler도 같은 클래스안에 우겨 넣고 if문으로 url을 구분해서 handler를 매핑해줬는데, 어떤 크루는 디스패처 서블릿을 구현하고 있다. ㅋㅋㅋ
일단 요구 사항은 만족했으니, 나중에 리팩토링 잘 해보자! 아자!
오늘 오전에는 HTTP 캐싱 강의를 들었습니다. HTTP 캐싱 설정하는 게 생각보다 많아서 신기했어요.
오후는 커뮤니티 기능 회의를 하느라 순식간에 지나갔어요.
이외에도 전체 커뮤니티에서 추천 게시물을 상위에 올리는데, 어떤 기준으로 추천을 할 것인지, 전체 커뮤니티 UI는 어떻게 구성할 것인지 긴 회의를 가졌습니다.
저녁에는 제이미와 테코톡 준비를 했어요!
무중단배포 실습을 위해 두 개의 WAS 서버 인스턴스를 사용하고 있어요.(서버1, 서버2) 그리고 각 서버의 8080포트와 8081포트에서 어플리케이션을 실행할 예정이에요. (서버 리소스를 줄이기 위함)
무중단배포 전략은 블루/그린으로 할 예정이에요.
기존 전략은 서버를 기준으로 블루서버와 그린서버를 나누었습니다. (ex. 서버1의 8080, 8081포트는 블루 & 서버2의 8080, 8081포트는 그린)
그런데 하나의 서버에서 두 포트로 동시에 서버를 실행시키고 있는 것 보다 각 서버에서 하나의 포트만 실행시키는 것이 리소스가 더 적어 방식을 변경했어요. 즉, 포트를 기준으로 블루서버와 그린서버를 나누게 변경했어요. (ex. 서버1과 서버2의 8080 포트는 블루 & 서버1과 서버2의 8081포트는 그린)
그리고 젠킨스를 도입해서 자동 배포를 하게 했습니다! 이 과정에서 젠킨스에 gradle과 java 환경변수 설정을 제대로 해주지않아 이슈를 겪었어요.
gradle 플러그인을 깔고, 원하는 버전의 gradle을 추가한 뒤 파이프라인 스크립트에서 tool모듈을 통해 gradle을 가져오는 것을 잊지말아요~ JAVA_HOME 환경변수 설정 잊지말아요~
또, sh파일 상단에 #!/bin/bash
를 추가했음에도 젠킨스 파이프라인 스크립트에서 sh로 명령어를 수행할 수 없었어요. sh대신 bash명령어를 사용하니 동작은 됐습니다. 😢
알 수 없는 에러도 있었어요! 젠킨스 파이프라인 스크립트에서 ssh agent를 사용해 nginx서버에 ssh 명령어를 날리는 부분이 있는데, 분명 설정을 잘 해준 것 같은데 permission denied가 떴어요. 😢
젠킨스는 거짓말을 하지 않을텐데... 대체 뭐가 잘못된걸까요! 이것 저것 수정하다 ssh 명령어에 있는 nginx의 서버 ip주소를 public에서 private으로 바꾸니 되었어요.
그래서 아! 젠킨스 스크립트에서는 private을 써야하는구나! 했는데 다음날 다시 해보니 public ip도 잘되더군요...ㅋㅋ 결국 이 날 permissiond denied 에러는 영원히 미스테리로 남았습니다.
밤에 돌아와서 넘 피곤했지만, 빨리 톰캣 미션 리뷰를 해줘야할 것 같아 리뷰를 했어요! 새벽 3시쯤 끝났는데, 오늘 못 쉰 것 같아 보상심리에 한 시간을 휴대폰하다 잤어요...ㅎㅎ 컨디션 망! 제발 그냥 자!
오늘 오전에는 Cookie와 Session강의를 들었어요. 캐싱하면 레디스인줄알았는데 Session을 사용해 캐싱하는 방법을 알게 되었어요. 사실 이 날 엄청 졸아서 내용이 기억안나요 ㅠㅠ 흑흑 수업에 집중해야하는데 집중 너무 어렵네요.
오늘은 너무 피곤해서, 점심을 먹지 않고 계속 잤어요! 자도 자도 피곤해!!!
오후에는 백엔드 팀원들과 해야할 태스크들을 리스트업했어요.
간간이 톰캣 미션 리뷰를 적용했습니다.
저녁에는 또 다시 제이미와 테코톡 준비를 했어요. 배포 실습에 보여줄 페이지를 변경했어요! 작은 이슈가 있었는데, 분명 Spring @Controller 에서 String을 반환하면 우선적으로 resources에 있는 static파일을 돌려주는 것으로 기억하고 있었어요! 그런데! 파일을 안돌려주더라고요! 타임리프를 gradle에 추가하니 되었습니다! 아! 이거 추가안해도 되는 걸로 기억하고 있었는데! 이런!
또 무중단 배포와 비교를 위해 무중단 배포를 적용하지 않은 스크립트도 만들었어요.
젠킨스는 항상 이슈가 나는군요! 😢 너무 어려워요!
오늘은 inc파일을 덮어 씌우는 코드가 동작하지 않았어요! 분명 저번 스크립트 파일과 크게 달라진 게 없는 것 같은데 의문이에요!
그리고 분명 스크립트 파일이 크게 바뀐 게 없는데 /bin/bash: bad interpreter: No such file or directory
에러가 났어요. 파일을 삭제하고 다시 생성하니 되었어요. 대체 뭔데!!!
휴먼 에러도 굉장히 많이 발생한 날이었습니다...ㅋㅋ
PublishedTrip에 새로운 컬럼 publishedDate
를 넣느냐, BaseEntity에서 상속받은 createdAt
을 바로 사용하느냐로 열띤 토론을 벌였던 날
publishedDate
입장 : createdAt
은 로깅이나 엔티티 추적을 위한 목적으로 생성한 것. 비즈니스 로직에서 사용한다면 혼란이 발생할수도 있다. (이후 publishedDate가 업데이트가 가능해진다면 대혼란) DB를 봤을 때 publishedDate
라는 컬럼이 없다면 이게 비즈니스적으로 중요한 컬럼이라고 이해하기 어려울 것. 직관성을 위해서라도 추가하는 게 좋다. 이 컬럼을 추가한다고 큰 리소스가 들지도 않을 것.
createdAt
입장 : publishedDate
가 변경될 가능성이 없고, createdAt
과 완전히 똑같은 값을 가지는 데 두 개의 컬럼으로 관리할 필요가 있는가? 코드를 짤 때 getCreatedAt과 getPublishedDate가 둘 다 있다면 혼란스러울 것. createdAt
이 로깅, 엔티티 추적용으로 사용된다고 해도 엄격하게 비즈니스 로직에서 사용하진 못한다고 규정할 이유가 있나? 단순한 조회의 목적이면 괜찮지 않을까?
이 밖에 좋아요
기능을 어떻게 구현할 지, 레디스 같은 캐싱을 도입할 지 토론을 했습니다...
톰캣 미션 1, 2단계 피드백을 적용하고 리뷰 재요청을 보냈습니다. 나는 3, 4단계 언제함?ㅋㅋ;
Hanglog github token이 만료돼서 git pull 액션실행중에 repository를 제대로 checkout 하지 못하는 이슈가 있었습니다. 귀찮아서 만료 기한이 없는 token을 새로 발급받으려는데 submodule적용을 위해선 token이 꼭 만료 시간이 정해져있어야 한다고 합니다. 에잉
오늘 flyway 적용했습니다. 적용 자체는 생각보다 금방 끝났습니다! build.gradle에서 필요한 의존성을 추가하고, application.yml에 flyway설정 추가, resources/db/migrations에 sql파일을 생성하니 되었어요!
flyway적용을 위해 application.yml을 수정하면서 oauth의 프로퍼티들을 제대로 로드하지 못하는 이슈가 생겼습니다? 이유는 모르겠어서 다음주로 넘기겠습니다?