본문 바로가기

공부/TIL

(84)
24.01.22 오늘은 중간발표를 하는 날 발표는 아무리 부담감이 적어도 항상 긴장된다. 그래도 이번에는 금요일부터 발표를 준비했기 때문에 발표 자료도 빵빵하고 시나리오도 미리 계획했다. 발표 준비가 어느정도 된 상태에서 시작. 생각보다 우리 팀이 많이 잘하고 있다고 느꼈다. 다른 조들도 너무 잘했지만 우리팀이 진짜 생각보다 너무 잘했다. 우리가 준비했던 것을 잘 발표를 마쳤다. 발표를 마쳤더니 치한 동료가 찬사를 했다 ㅎㅎ 발표를 마쳤더니 전에 같이 팀했던 동료들이 칭찬을 해줘서 정말 기분이 좋았다. 그리고 7시까지 오랜만에 아무 생각 안하고 그냥 마냥 쉬었다. 다크나이트 라이즈를 보면서 밥먹고 쉬었다. 밥먹고 튜터님과 피드백 시간을 가졌는데 우리팀 많이 잘 하고 있고, 이정도 했으면 난이도 있는 도전 과제를 하는것도..
24.01.19 오늘로 중간 발표를 준비를 마쳤다. 자랑스럽게도 우리 프로젝트가 배포됐고, 유저 피드백도 받았다. 그런데 우리 서비스에 빵꾸난 것이 너무 많다.. ㅋㅋㅋㅋㅋㅋㅋ 이게 프론트를 최소화해서 구현하려다 보니까 백앤드는 준비가 됐는데, 프론트가 구현이 안돼서 이걸 연결을 못시켜서 유저 입장에서 서비스가 너무 구멍이 많이 뚫려있다고 피드백이왔다. 우리는 백앤드 개발자다보니 프론트 앤드에서 개발해야하는 시간을 최소화 하자니 구멍이 너무 많이 나있다.. 이걸 간극을 어떻게 매워야할지 좀 더 고민을 해야겠따. 오늘 중간 발표를 준비하면서 우리 프로젝트에 리팩토링 해야할 것들이 너무 많다. 첫번째로 나는 컨트롤러단에서 object를 반환한다고 선언 해놓은게 너무 많은데 이거 다 응답 DTO로 변환 시켜줘야 된다. 또 외..
24.01.18 오늘은 어제에 이어 스프링을 띄우는 작업! 어제 환경 변수가 문제였다. 이를 Dockerfile의 env를 이용해 환경 변수를 정해주니 잘 작동했다. 하지만? 어림도 없지 mysql이 바로 문제다. 근데 이건 살짝 예견이 됐다. 왜냐하면 배포 환경에 mysql을 pull 하지 않았으니까! 그래도 docker에 mysql을 pull 하고, 환경 변수를 다시 설정 해줬더니 안된다 ㅎㅎ;; 아... 진짜 너무 어렵다 배포!!!!! 다행히 경남님이 도커를 이용해 배포를 성공 하셨고, ci/cd까지 구축하셨다. 다행히 배포는 잘 됐고 이제 진짜 큰 걱정은 한시름 놨다. 이제 어떤 기능을 확장 시킬지에 대해 얘기를 해보고, 내일은 발표를 준비할 예정이다. 발표는 내가 하기로 했다. 조금 부담이 되긴 하지만 그래도 ..
24.01.17 오늘은 하루종일 배포를 공부했다. 진짜 배포는 너무 어렵다. 우선 리눅스 환경에서 하려니 명령어도 그렇고 익숙하지 않고, 새로운 용어들이 너무 많다. 그래서 이 용어들이 익숙해지는데 시간이 오래 걸렸다. 오늘 내가 해본 것은 우리 프로젝트에 Dokerfile를 만들었다. 우리 프로젝트를 jar 파일로 만들고, 실행하는 이미지를 만들고, 그 이미지를 도커 허브에 올린다. 그리고 ec2를 띄워서 도커를 실행한 후, 도커허브의 이미지를 pull 받고 실행! 그런데 spring이 실행이 되지 않는다. 이 문제는 보통 환경 변수 설정이 잘못되어 환경변수를 필드값으로 갖는 클래스들이 bean으로 뜨지 못할 때 나오는 문제였다. 따라서 환경변수를 리눅스에서 설정을 해주고, 확인을 했다. 이렇게 환경변수의 KEY-VA..
24.01.16 프로젝트 프론트와 백이 이제 거의 마무리 됐다. mvp는 달성했으니 이제 배포를 하고 그후 기능 확장을 시작 할 예정이다. 우리가 확장할 기능은 첫번째로 채팅기능을 추가하기, 테스트 코드 작성, 그리고 우리 프로젝트 고도화하기. 첫번째로 채팅구현은 아직 해보진 않았다. 그래서 더 하면 좋을 것 같다. 웹소켓을 이용해서 구현하면 될 것 같다. 두번째로 테스트 코드 작성은 이제 진짜 더는 미룰 수 없기 때문에 시작 해야 한다. 세번째로 프로젝트 고도화 하기는 캐싱데이터 중에 많이 캐싱된 데이터를 우리 메인 db에 저장한다던지. 스테디하게 캐싱되는 데이터를 우리 데이터에 저장한다던지 하면 좋을 것 같다. 구체적으로 어떤 방식을 사용할지는 아직 말이 안나왔다. 우선 도커를 이용해 CI/CD 배포를 해보자!
24.01.15 [면접 대비 질문 정리] 대용량 트래픽을 처리하는 방법 1. Scale-out 서버의 물리적 확장을 한다. 이때 고려해야할 것은 업무의 배분 서버의 양이 늘었으니 서버마다 일을 할당해줘야 한다. 이를 해결하는 방법은 로드 밸런싱이다. 로드밸런싱은 남은 큐의 크기, 이미 축적된 요청들의 예상 시간을 고려해 최적의 서버로 요청들을 분배하는 것. 2. Scale-up 서버의 성능을 늘리는 것. CPU, 메모리, 기억장치 이 중 무엇이 데이터 처 속도를 규정할까? 답은 바로 기억장치. 결국 기억장치의 IO 속도가 결정짓게 된다. 기억장치의 성능을 업그레이드 하기ㅏ 위한 방법으로는 IN-MEMORY DATABASE를 사용한다. Redis 와 같은. 이를 이용해 데이터를 캐싱해 반복되는 작업을 저장한다. ORM을 ..
24.01.12 오늘 마주한 문제들을 풀어보는 시간! 익숙하다. 한번 걸려봤던 바로 순환 참조에 걸렸다. 문제는 바로 TopsterService와 LikeService가 서로 순환참조를 해서 Bean을 떠줄 수가 없다는 것. 이를 해결하려면 한쪽 Service에만 의존성을 주입해줘야 한다. 그렇다면 어느 Service에 의존성을 주입해주는 게 좋을까? 이를 해결하러 성원 튜터님께 갔다가 진짜 청천벽력과 같은 이야길 들었다. 바로 종속된 entity에서는 상위 entity를 참조하는 것은 설계가 잘못 됐다는 것.... 진짜 이게 무슨소리야! 싶은 말이였지만 성원 튜터님의 설명을 듣다보니 정말 납득이 됐다.(물론 구현은 다른 문제다) 바로 하위 엔티티는 상위 엔티티를 찾아서 사용하는 것은 좋지 않다는 것. 지금 우리 코드에..
24.01.11 static에 대해 자주쓰이는 메서드들을static으로 처리하는 것이 좋을지 몰라서 튜터님께 질문 드리러 갔다. 내가 질문 했던 것은 이것. public Topster getTopster(Long topsterId){ log.info("topsterId :" + topsterId +"로 topster 조회 시작"); Optional optionalTopster = topsterRepository.findById(topsterId); if(optionalTopster.isPresent()){ return optionalTopster.get(); }else { log.error(NOT_EXIST_TOPSTER.getMessage()); throw new ServiceException(NOT_EXIST_TOP..
24.01.10 내일 드디어 담당 튜터님과 피드백 시간이 있다. 우리의 문제점을 잘 적어서 튜터님께 질문하자! 오늘은 어제에 이어 우리 프로젝트에 실제로 코드를 적용시키는데 시간을 썼다. 탑스터 관련 도메인 기능 구현을 했는데 이게 생각보다 시간이 더오래걸린다. 내가 예상했던 것보다 한 3시간씩 더 시간이 더 소요된다. 아무래도 연관관계가 조금 복잡하다보니, save하나 하는데도 로직이 많이 길어지나보다. 아무튼 이제 탑스터 등록/조회/삭제 기능까지 마무리 됐다. 또 어제 다시 구현 했던 maniadb로 쿼리를 날렸던 메소드를 세분화해줬다. 메소드 하나가 갖는 기능이 너무 많아서 그 기능들을 나눠서 분배 해주는 작업을 했다. 이제는 파편화된 도메인들을 묶어주는 시간이다. 또 프론트 개발을 본격적으로 할 것. 경남님과 영..
24.01.09 오늘은 어제 test용으로 팠던 프로젝트를 우리 topster2.0 프로젝트에 이식하는 일을 했다. 이거 근데 생각보다 시간이 오래걸렸다. 물론 로직이 어렵거나 하진 않았다. 우선 새로 Albu, Song 도메인을 셋업을 하고, maniadb에서 온 XML데이터를 JSON으로 파싱하고, 파싱된 JSON 데이터를 Entity로 변환하는 로직을 새로 추가했다. 그리고 어제 문제였던 song이 마지막 트랙이 누락되었던 것도 수정했다. JSONArray Song을 사용하지 않고, tracklist인 String값을 Split해서 나눠서 진행했다. 그렇게 모든 과정이 끝났고, 정상적으로 로직은 돌아갔다. 물론 아직 추가해야할 로직이 많다. (rest api는 최초로만 쿼리를 보내고, 우리 db에 있으면 rest ..