레벨4 2주차 회고

hongo·2023년 9월 6일
0
post-custom-banner

태스크

  • 커뮤니티에 어떤 기능을 추가하면 좋을까?
  • 톰캣 구현 미션 step1,2 제출!
  • 바론이 1차 리뷰 완료!
  • 커뮤니티 DB 설계(AccessLevel, Like)
  • 테코톡 준비
    • 무중단 배포 스크립트 작성
    • 무중단 배포 테스트용 WAS 생성
    • 젠킨스로 자동 배포
    • 발표 시나리오 작성

인지한 것

  • HTTP 캐싱
  • ssh agent vs ssh publisher
  • flyway

학습한 것

  • 톰캣이 Socket을 통해 클라이언트와 커넥션을 맺고 IOStream으로 Request, Response를 주고받는다는 것을 알게 되었다.
  • HttpRequest와 HttpResponse의 형태에 익숙해졌다.

0904 월요일

미션 1, 2단계에에ㅔㅔㅔㅔㅔㅔㅔㅔㅔ 제출한 걸로 만족합니다.
톰캣... 이런 일들을 대신 해주고 있었구나. 정말 고맙다.
난 시간이 부족해서 handler도 같은 클래스안에 우겨 넣고 if문으로 url을 구분해서 handler를 매핑해줬는데, 어떤 크루는 디스패처 서블릿을 구현하고 있다. ㅋㅋㅋ
일단 요구 사항은 만족했으니, 나중에 리팩토링 잘 해보자! 아자!

0905 화요일

오늘 오전에는 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시쯤 끝났는데, 오늘 못 쉰 것 같아 보상심리에 한 시간을 휴대폰하다 잤어요...ㅎㅎ 컨디션 망! 제발 그냥 자!

0906 수요일

오늘 오전에는 Cookie와 Session강의를 들었어요. 캐싱하면 레디스인줄알았는데 Session을 사용해 캐싱하는 방법을 알게 되었어요. 사실 이 날 엄청 졸아서 내용이 기억안나요 ㅠㅠ 흑흑 수업에 집중해야하는데 집중 너무 어렵네요.

오늘은 너무 피곤해서, 점심을 먹지 않고 계속 잤어요! 자도 자도 피곤해!!!

오후에는 백엔드 팀원들과 해야할 태스크들을 리스트업했어요.
간간이 톰캣 미션 리뷰를 적용했습니다.

저녁에는 또 다시 제이미와 테코톡 준비를 했어요. 배포 실습에 보여줄 페이지를 변경했어요! 작은 이슈가 있었는데, 분명 Spring @Controller 에서 String을 반환하면 우선적으로 resources에 있는 static파일을 돌려주는 것으로 기억하고 있었어요! 그런데! 파일을 안돌려주더라고요! 타임리프를 gradle에 추가하니 되었습니다! 아! 이거 추가안해도 되는 걸로 기억하고 있었는데! 이런!

또 무중단 배포와 비교를 위해 무중단 배포를 적용하지 않은 스크립트도 만들었어요.

젠킨스는 항상 이슈가 나는군요! 😢 너무 어려워요!
오늘은 inc파일을 덮어 씌우는 코드가 동작하지 않았어요! 분명 저번 스크립트 파일과 크게 달라진 게 없는 것 같은데 의문이에요!

그리고 분명 스크립트 파일이 크게 바뀐 게 없는데 /bin/bash: bad interpreter: No such file or directory 에러가 났어요. 파일을 삭제하고 다시 생성하니 되었어요. 대체 뭔데!!!

휴먼 에러도 굉장히 많이 발생한 날이었습니다...ㅋㅋ

0907 목요일

PublishedTrip에 새로운 컬럼 publishedDate를 넣느냐, BaseEntity에서 상속받은 createdAt을 바로 사용하느냐로 열띤 토론을 벌였던 날

publishedDate 입장 : createdAt은 로깅이나 엔티티 추적을 위한 목적으로 생성한 것. 비즈니스 로직에서 사용한다면 혼란이 발생할수도 있다. (이후 publishedDate가 업데이트가 가능해진다면 대혼란) DB를 봤을 때 publishedDate라는 컬럼이 없다면 이게 비즈니스적으로 중요한 컬럼이라고 이해하기 어려울 것. 직관성을 위해서라도 추가하는 게 좋다. 이 컬럼을 추가한다고 큰 리소스가 들지도 않을 것.

createdAt 입장 : publishedDate가 변경될 가능성이 없고, createdAt과 완전히 똑같은 값을 가지는 데 두 개의 컬럼으로 관리할 필요가 있는가? 코드를 짤 때 getCreatedAt과 getPublishedDate가 둘 다 있다면 혼란스러울 것. createdAt이 로깅, 엔티티 추적용으로 사용된다고 해도 엄격하게 비즈니스 로직에서 사용하진 못한다고 규정할 이유가 있나? 단순한 조회의 목적이면 괜찮지 않을까?

이 밖에 좋아요 기능을 어떻게 구현할 지, 레디스 같은 캐싱을 도입할 지 토론을 했습니다...

톰캣 미션 1, 2단계 피드백을 적용하고 리뷰 재요청을 보냈습니다. 나는 3, 4단계 언제함?ㅋㅋ;

0908 금요일

Hanglog github token이 만료돼서 git pull 액션실행중에 repository를 제대로 checkout 하지 못하는 이슈가 있었습니다. 귀찮아서 만료 기한이 없는 token을 새로 발급받으려는데 submodule적용을 위해선 token이 꼭 만료 시간이 정해져있어야 한다고 합니다. 에잉

오늘 flyway 적용했습니다. 적용 자체는 생각보다 금방 끝났습니다! build.gradle에서 필요한 의존성을 추가하고, application.yml에 flyway설정 추가, resources/db/migrations에 sql파일을 생성하니 되었어요!

flyway적용을 위해 application.yml을 수정하면서 oauth의 프로퍼티들을 제대로 로드하지 못하는 이슈가 생겼습니다? 이유는 모르겠어서 다음주로 넘기겠습니다?

post-custom-banner

0개의 댓글