본문 바로가기

전체 카테고리326

클린코드와 코드 컨벤션 1. 목적 고급 개발자가 되기 위해 그리고 혼자 개발하는 것이 아닌 여러 개발자와 함께 협업 프로젝트를 진행하기 때문에 다른 사람들도 나의 코드를 볼 수 있고, 유지보수 등을 위해 코드를 수정할 수도 있기 때문에 다른 사람이 나의 코드를 보고 잘 이해할 수 있도록 작성을 하는 것이 좋다 그렇기 때문에 이번 클린코드 세미나를 듣고 관련 내용을 정리하려고 한다. 2. 좋은 코드와 나쁜 코드는 뭘까? 좋은 코드 즉, 클린 코드는 가독성이 좋고 유지보수성이 좋은 코드라고 생각한다. 클린 코드는 팀의 협업 관점과 유지보수의 관점에서 많은 순기능을 발생시킵니다. 클린 코드는 장기적으로 읽고 유지 관리하기 쉬운 코드를 작성하는 것입니다. 3. 코드 작성 방법 정리 3.1. 변수명 '의도를 분명히 밝혀라!' '축약어 .. 2023. 4. 5.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 8 - 스웨거(Springdocs)로 API 문서 제공 API 문서화를 위해 Springdocs 도입 프론트엔드에 API 를 테스트해 볼 수 있는 화면을 제공 "Springfox"의 경우 2020년 이후 활동이 없는 상태라, Springdoc를 사용하였습니다. 의존성 추가 implementation 'org.springdoc:springdoc-openapi-ui:1.6.14' application.yml 설정 springdoc: api-docs: path: /chat-api-docs default-consumes-media-type: application/json default-produces-media-type: application/json swagger-ui: operations-sorter: alpha tags-sorter: alpha # http:/.. 2023. 3. 9.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 7 - 성능 측정, 성능 향상을 위한 리팩토링, 수정과 보완 설계때 정의한 기능들을 우선 구현하고 모바일과 연동을 위해 AWS EC2에 배포를 하였습니다. 이후에는 리팩토링과 성능 향상, 수정과 보완을 하는 시간을 가져보려고 합니다! 1. 성능 테스트 서비스가 얼마나 빠른지 time 일정시간 동안 얼마나 많이 처리할 수 있는지 TPS 얼마나 많은 사람들이 동시에 사용할 수 있는지 Users 서버 메모리 CPU Usage 1.1. nGrinder 사용 💡 성능 측정 목적으로 개발된 오픈소스 프로젝트로 NHN 사단이 개발했다고 합니다. 부하를 줄 수 있는 인터페이스와 테스트 결과를 통계로 제공하며 Groovy 스크립트로 테스트 시나리오를 작성합니다. JUnit 과 유사한 그루비 언어로 시나리오에 따라 스크립트 작성 가능, 오픈소스에 레퍼런스 많기 때문에 사용하였습니다.. 2023. 3. 5.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 6 - 프로젝트 배포 1. 개요 개발 도중 모바일과 서버의 연동테스트를 하는 시간을 가졌습니다. 현재 GitHub를 통해서만 코드를 공유하고 있고 로컬환경에서만 개발하고 있었기 때문에 모바일과 서버가 연결할 수 없었습니다. 팀회의 결과 도커에 올려서 모바일 개발자가 이미지를 받아 서버를 실행시키는 방법도 있었지만 그러기엔 복잡한 과정을 거쳐야했기에 서버를 배포해서 모바일 개발자들이 연동 테스트를 하기로 하였습니다. 현재 Spring Boot 서버는 MSA구조로 인증, 유저, 알림, 채팅, 접속상태 마이크로서비스, 2개의 메인 DB (MySQL, MongoDB), 레디스, 카프카를 운영중입니다. ec2 하나에 모두 넣자는 의견이 있었지만 마이크로서비스들과 레디스, 카프카는 ec2에 넣고 MySQL은 AWS RDS, MongoD.. 2023. 3. 4.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 5 - MongoDB 쿼리 자유롭게 사용하기 Spring Boot에서 MongoTemplate를 활용한 MongoDB 쿼리 자유롭게 사용하기 MongoRepository를 사용하다 쿼리 작성해 한계가 있어서 좀 더 고도화된 쿼리문을 작성할 수 있는 MongoTemplate 사용하기로 하였습니다. MongoTemplate을 사용하기 위해서는 db.collection.find()와 같은 MongoDB 쿼리문도 어느 정도 알아야했습니다. 제가 원하는 쿼리 결과를 생각하면서 쿼리문 예제와 docs 를 찾아보며 연구를 하고 원하는 결과가 나오는 것을 보니 재미가 있더라구요! 이번 포스팅은 에서 사용해봤던 쿼리들을 통해 MongoDB 쿼리문과 MongoTemplate 쿼리 작성을 비교해보면서 쿼리를 자유롭게 작성한 것을 공유할 것입니다. 1. 몽고디비 세팅 .. 2023. 3. 3.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 4 - 구현 : 접속상태 서비스 개요 2022 스마일게이트 윈터데브캠프를 통해 성장하기 3 - 구현 : 채팅 서비스 (tistory.com) 앞 글에서 채팅 서비스를 구현했는데요! 이번에는 접속상태 서비스를 구현하여 제가 구상한 아키텍처를 참고하여 서비스들간 통신을 하려고 합니다. Flow는 다음과 같습니다. 1. 애플리케이션에 접속시 자신의 접속 상태를 업데이트 시킵니다. (on & off) 2. 자신의 접속상태를 자신과 친구관계인 유저에게 자신이 접속했다는 정보를 소켓을 통해 전달합니다. 3. 채팅 메시지 전송시 채팅 서버에서 접속상태를 접속상태서버를 확인하고 경우에 따라 처리합니다. 3.1. "online" 소켓을 통해 채팅메시지 전달 3.2. "offline" 푸시서버에 채팅 메시지 전달 1. 접속상태 서비스 1.1. 웹소켓 메.. 2023. 3. 1.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 3 - 구현 : 채팅 서비스 Implementation 제가 맡은 파트는 채팅서버, 접속상태서버입니다. 전체 계획으로는 2주간 채팅서버, 1주 접속서버, 1주 통합, 성능 테스트, 1주 최종발표준비로 세웠습니다. 1/22~1/28 (1주) : 채팅 서버 29 (2주) : 채팅 서버 5 (3주) : 접속서버 12 (4주) : 통합, 성능 19 (5주) : 최종발표준비 2주간 개발 1. 서버 세팅 Spring Initializr 2. 서버 환경 Spring Boot : 2.7.8 Java : Jdk 11 build : Gradle 설정파일 : application.yml 인텔리제이 : 소스 코드 문서 UTF-8 디펜던시 Spring Actuator 서비스의 상태 정보를 실시간으로 모니터링 가능 Lombok Spring Boot DevT.. 2023. 2. 28.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 2 - 프로젝트 설계와 마음가짐 구현에 들어가기전 대규모일 경우 애자일 개발 프로세스로 짧은 주기로 나눠 반복적으로 개발해도 되지만 소규모 단기간 프로젝트이기 때문에 폭포수 개발처럼 SDLC를 따라 요구분석 - 설계 - 구현 - 테스트 순으로 개발할 것 전체적으로 MSA구조로 인증,유저, 알림, 채팅, 접속상태 마이크로서비스가 있는데 제가 맡은 부분인 채팅, 접속상태 서비스 위주로 작성겠습니다. 1. 요구 분석 프로젝트 개요 소켓 통신을 활용한 메신저 앱 개발 1:1 채팅과 그룹 채팅 모두 지원하는 메시징 앱 서비스로 "페이스북 메신저"를 벤치마킹하여 로직을 참고하였습니다. 기술 스택 Java11 Spring Boot 2.7.8 kafka mongoDB Gradle Git JUnit5 AWS Docker 주요 기능 ● 채팅 서비스 1:.. 2023. 2. 26.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 1 - 좋은 목표는 좋은 실행에서 나온다. 팀 프로젝트 시작 윈터데브캠프에서 개발뿐만 여러 활동을 하면서 원래 알고 있던 부분에 대한 정의를 깨는 등 새롭게 깨달은 것들을 기록하고 당시에 어떻게 생각했는지 그러한 생각들이 어떻게 변했는지 적으면서 생각정리를 할 것입니다. PMP 작성에 목표를 세우는 데 있어서 멘토님 강의가 있었습니다. 일반적으로 생각하는 목표는 이러했습니다. ... 구현 능력 향상 .. 이해하기 .. 적용하기 ..블로그에 기록하기 하지만 멘토님의 강의에서 정의하는 목표는 달랐습니다. 개발자로 성장하기 위해서는 프로젝트 경험라는 실행과 목표라는 데이터를 가지고 경험하는 과정을 거친다 그 속에서 문제해결, 깨달음을 얻고 성찰한다. 그런 것들을 회고하면서 성장을 하는 파이프라인을 가진다. 개발자는 성장을 위해 실행이라는 프로젝트 경험.. 2023. 2. 25.
Spring Cloud (MSA) - 모니터링 (Actuator, Prometheus, Grafana) 개요 배포를 한 뒤에 내가 내가 배포한 서버가 잘 동작하는지 어떻게 동작하고 있는지 서버의 상태를 확인할 수가 없었습니다. 그래서 모니터링하는 기술들이 있었는데 적용해본 기술들은 다음과 같습니다,. Spring Actuator Prometheus Grafana 그라파나를 사용하기 위해서는 프로메테우스의 정보가 필요하고 프로메테우스를 사용하기 위해서는 /actuator/prometheus 와 같이 연결이 필요했습니다. 그래서 Spring Actuator, Prometheus, Grafana 순으로 적용시켜보았습니다. 환경 Win11 Spring boot 2.7.8 Docker Engine v20.10.21 Spring Actuator implementation 'org.springframework.boot.. 2023. 2. 16.
Spring Cloud (MSA) - 스프링부트 도커 이미지 생성 후 컨테이너 실행 도커 이미지 생성 예시1) 윈도우에서 테스트없이 빌드 : ./gradlew clean build -x test 이미지 생성 $ docker build -t llsrrll96/timedeal:timedeal-0.0.1-SNAPSHOT . 생성이 안될 경우 참고 윈도우에서 테스트없이 빌드 : ./gradlew clean build -x test 빌드를 해서 .jar 파일 생성 예시2) docker build -t docker.io/in28min/mmv2-currency-exchange-service:0.0.1-SNAPSHOT . 예시3) $ docker build -t chat:chat-0.0.1-SNAPSHOT . {이미지이름}:TAG 이미지 확인 docker images 또는 Docker Desktop .. 2023. 2. 1.
도커 설치 이미지 컨테이너 명령어 도커 설치 [Docker] Windows 도커 설치 Windows와 Docker 이번 글에서는 Windows 도커 설치하는 내용을 다룬다. Docker는 리눅스를 기반으로 하기 때문에 리눅스 운영체제 위에서 돌아가야한다. Linux 계열 이외의 운영체제에서 도커를 사용하 myjamong.tistory.com [Windows 10] Docker 설치 완벽 가이드(Home 포함) - LainyZine [Windows 10] Docker 설치 완벽 가이드(Home 포함) Docker는 경량 가상화 기술인 리눅스 컨테이너 도구입니다. Windows 10 Home과 Pro에서도 몇 가지 설정을 통해 Docker Desktop으로 리눅스 컨테이너를 사용할 수 있습니다. 이 글에서는 Windows 10에서 Docke.. 2023. 1. 16.