민스씨의 일취일장

후기 | F-Lab Java Backend 과정 9주차 본문

Personal Development/F-Lab 자바 백엔드 과정 [진행중]

후기 | F-Lab Java Backend 과정 9주차

읻민스 2024. 7. 31. 21:27
반응형

F-Lab Java Backend 과정 9주차 후기 글이다.

F-Lab Java Backend 과정 9주차

F-Lab Java Backend 9주차 썸네일 이미지이다.
F-Lab Java Backend 9주차

9주차 멘토링 주제

9주차 멘토링 주제는 아래와 같다.

이론
1. Spring Bean Scope
2. Spring MVC
3. Spring Transaction
4. Spring Security
5. APM

프로젝트
1. 프로젝트 도커 컨테이너화 하기
2. 도커 컨테이너 클라우드 서버에 배포하기
3. nGrinder를 이용해 로컬 환경 테스트 하기
4. VisualVM을 이용해 로컬 환경에서 애플리케이션 모니터링 하기
5. 프로젝트에 Open API Specification 정의하기

이력서
1. 이력서 수정하기

프로젝트

도커

이번 주 최대 주제는 도커이다. 도커를 익히고, 만든 서비스를 컨테이너화 해서 도커에 띄우고, 이렇게 띄운 방식으로 클라우드 서버에서도 띄우는 것이 이번 주의 과제이자 목표였다. 언제나 가장 난해하고 잘 못했던 것이 도커였기 때문에 정말 이번엔 제대로 하고 싶었다.

  • 이론 공부

책을 하나 골랐다. 서점에 가서 많은 도커 책들을 둘러보고 고른 책이다. <도커 교과서> 정말 봐도봐도 헷갈리던 도커파일, 이미지, 컨테이너 개념을 아주 잘 잡을 수 있었다. 그전에는 인강을 이용해서만 도커 공부를 했다. 그렇기 때문에 말로 이야기를 이해해야 했고, 명령어를 써보는 것으로 기능들을 기억해야 했다. 그런데 도통 헷갈리고 명확하게 머리에 남지를 않았다. 그래서 이번엔 책을 본 것이다. 책으로 보니 일단 도커파일, 이미지, 컨테이너의 개념을 정말 아주 명쾌하게 이해할 수 있었다. 그리고 책을 따라서 실습을 하면서 왜 그간 도커를 혼동해 왔는지 예측할 수 있었다.

보통 도커 이미지와 컨테이너를 다룰 때, docker image, docker container로 구분해서 명령어가 실행된다. 그런데 컨테이너의 경우는 container가 없이도 동작이 된다. 또 image를 삭제할 떈 image 키워드를 사용하지 않는다. 명확하게 알지 못하면서 이렇게 뒤섞여 사용되는 명령어로 익히려고 하니 잘 안됐던 것이다. 누군가 도커를 공부한다면 꼭 책으로 하라고 추천하고 싶다.

  • 실습

내용을 명쾌하게 이해하니 실습이 그렇게 어렵지 않았다. 오히려 너무 재미있었다. 다만 마지막에 네트워크, 즉 도커간 통신이나 도커와 외부 DB 통신등이 아직은 난해하다. 좀 더 섬세한 연습이 필요하다.

모니터링 및 성능 테스트

이번 주 도커를 학습해야만 했던 이유중 하나는 성능 테스트를 해보기 위함이다. 컨테이너로 구성하면 서버를 띄우기도 간단하고, 또 성능 테스트 툴들 또한 간단하게 컨테이너로 작동 시킬 수 있기 때문에 도커를 꼭 했어야 했다.

  • VisualVM

이렇게 구동시킨 도커를 VisualVM을 이용해서 모니터링 하는 것을 시작으로 성능 테스트 과제가 시작되었다. VisualVM은 간단한 응용프로그램이기 때문에 다운받아서 실행만 시키면 되는데, 서버 설정에서 VisualVM이 데이터를 읽을 수 있도록 포트를 열어주는 등의 작업이 필요했다. 난이도 높은 작업은 아닌데, 잘 안돼서 하루를 꼬박 사용했다.

Dockerfile에서 VisualVM 환경설정을 한다. 여기서 hostname을 0.0.0.0으로 했다.
-Djava.rmi.server.hostname=0.0.0.0"

그럼 VisualVM에서 연결할 때, Remote > Add Remote Host 에서 0.0.0.0으로 등록을 해야 한다. 그럼 된다.

VisualVM 구동모습이다.
VisualVM 실행 모습

자세한 내용은 아래 글에서도 확인가능하다.

 

VisualVM | Java 애플리케이션의 모니터링 도구 with Docker

VisualVM 사용하며 겪은 시행착오와 사용 방법에 대한 글입니다.VisualVM이란?VisualVM은 Java 애플리케이션을 위한 성능 모니터링 및 프로파일링 도구이다.VisualVM 사용방법VisualVM은 응용프로그램으로,

ydmins.com

 

  • nGrinder

그 다음은 성능 테스트였다. 처음 과제는 nGrinder를 이용해서 로컬 환경에서 테스트 해보는 것이었다. nGrinder를 사용할 땐 Controller와 Agent를 위해 적어도 2대의 컴퓨터가 필요한데, 일단 사용해보는 것을 목표로 한 컴퓨터로 진행했다. nGrinder의 컨트롤러와 에이전트를 실행하는 것 까지는 도커를 이용하기 때문에 간편한데, 스크립트를 작성해서 구동중인 서버와 연결 시켜 테스트 하는 것은 쉽지 않았다. (물론 어려울 것도 아니겠지만, 처음 작성하는 스크립트여서 실수를 많이했다.)

nGrinder 테스트 모습이다.
nGrinder 테스트 모습

Open API Specification

오픈 API 적용을 위해 yaml 파일도 작성해 보았다. 일단 이론을 지난 주에 공부를 했기 때문에 손쉽게 시작할 수 있었다. 다만 작성해보면서 Open API는 애플리케이션의 전체 설계도를 그리는 기분으로 하나하나 다 작성을 해야 했다. 미리 작성을 잘하는 습관을 들이면 정말 계획적으로 애플리케이션을 만들 수 있겠단 생각이 들었다.

AWS에 배포

서버 환경에서 도커 컨테이너를 띄우는 것이 목표이기 때문에 GitHub Actions와 같은 CD 툴을 사용할 필요가 없었다. 대신 도커 레지스트리인 Docker Hub를 이용했다. 배포한 서비스의 이미지를 Docker Hub에 push해 두었다. 그런다음 EC2 인스턴스를 생성해 터미널 환경에서 도커를 설치하고 이미지를 Pull 한 다음 Run 해주었다. 내용을 명확히 이해한 다음이여서 해매지도 않았고 정말 쉽다고 생각이 들었다. 하지만 아직 도커간 통신 부분이 약해서 DB 연결은 못하고 배포해보는 것으로만 마무리 지었다. DB연결은 다음주에 하기로 했다.

이력서

요즘 멘토링 시간의 한 축을 차지하는 것이 이력서에 대한 이야기이다. 이력서를 수정하고 준비하면서 앞으로 어떻게 진행할 것인지에 대한 이야기가 자연스럽게 이어진다. 이번주에는 만들고 싶은 이력서를 작성해서 멘토님께 보여드렸다. 이 것에 대해서 멘토님은 내용은 좋으니 이것들을 채우기 위해서 해야할 일들을 목록을 세워보라고 하셨다. 그 리스트를 토대로 앞으로 채워나가면 되기 때문에! 정말 채워 나갈 수 있을 것 같아 마음이 든든하다!

이론

선택과 집중

이번 주는 도커에 정말 많은 시간을 썼다. 그래서 전략적으로 이론에서는 이미 어느 정도 공부해본적이 있어서 남은 시간동안 잘 공부할 수 있는 것들 위주로 하기로 했다. 그래서 Spring Security는 다음주에 하기로 결정했다.

공부 과정

GPT를 이용해서 토론하면서 준비하였다. Spring도 책으로 하면 좋지만, 시간이 많이 부족했고 보통 Spring 책들은 정말 두꺼워서 욕심부리다간 하나도 준비 못할 것 같았다.

느낀점

  • 솔직히 도커를 준비한다고 하였지만, 로컬 DB 연결은 성공했지만 아직 AWS 환경에서 DB 연결을 하지 못해 마음이 편치 않았다. 한 주동안 성취가 너무 낮은 것 같은 기분이 들기도했다. 그런데 멘토님께 이번주에 한 것들을 말씀드렸더니, 정말 많이 한거라고 칭찬해주셨다. '띠용' 순간이었다. 혼자 했으면 DB 연결이 될 때가지 계속 그 불편한 마음을 갖고 있었을 텐데 중간에 격려를 받으니까 다음 스텝으로 나갈 힘이 더생겼다. 공부한 걸 '나 공부 이렇게 열심히 했어요' 하고 보여줄 수 있는 사람이 필요했던건 아닐까 하는 생각도 들었다.
728x90
반응형