Backend

이번 게시물은 3월 초 코드몬스터 백엔드 팀에 합류 뒤, 이미지 업로드 기능을 개선한 과정을 자세히 풀어보려고 합니다.1. 기존 이미지 업로드 방식의 문제점 저희 서비스에서는 사용자가 알고리즘 문제 풀이 글을 작성할 때 이미지를 함께 업로드할 수 있는 기능을 제공해왔습니다. 초기에는 단순히 이미지들을 Multipart 방식으로 백엔드에 이미지 파일들을 전송하고, 백엔드에서 해당 이미지 파일들을 AWS S3에 업로드한 뒤, S3 image URL로 변환해 사용하는 구조로 개발해왔습니다. 이 방식은 처음에는 간단하고 빠르게 개발하는데 문제 없었지만, 시간이 지나며 아래와 같은 여러 문제점들이 발생하기 시작했습니다. (1) 게시글 수정 시 이미지 순서 트래킹 문제 사용자가 기존 게시글을 수정하며 이미지를 ..
1. 기존 방식에서 느낀 불편점들 카테캠과 해커톤 프로젝트를 진행하면서 여러 번 배포를 경험했지만, 할 때마다 어딘가 모를 불편함을 느꼈다. 😔 매번 터미널을 열어 SSH로 EC2 서버에 접속한 뒤, .sh 스크립트를 실행하는 방식으로 배포를 진행했다. 처음에는 내 손으로 직접 서버에 코드를 배포했다는 성취감이 있었지만, 여러 프로젝트에서 계속 이런 수동 배포를 반복하다 보니 분명한 한계를 느끼게 되었다.#!/bin/bash# 실행 중인 애플리케이션 종료echo "Stopping existing application..."PID=$(pgrep -f 'java -jar')if [ -n "$PID" ]; then kill -9 $PID echo "Application stopped (PID: $PI..
2024년 8월 21일부터 세차새차에 백엔드 개발팀에 합류하였다! 이번 포스팅은 온보딩 이후 나의 첫 이슈 해결 일지이다.    이슈 자체는 간단했다. (나의 기능 개발이 간단하지 않아서 문제였지만 ㅎㅎ..)  회원 엔티티인 Member의 필드값 수정 API를 구현하는 것이었다. 추가적으로 세차장의 새로운 Owner에 대한 Owner 변경 API 또한 구현하였다. 1. 회원 정보 변경 API 구현🤔 유효성 검사는 어느 계층에서?! 변경될 내용이 담긴 DTO가 컨트롤러에 전달된다. 이때, validation은 어느 단에서 처리해주어야할지 고민이 되었는데 CTO님과 상의 후 DTO 단에서 처리하도록 결정하였다! 여름방학에 한상곤 교수님께서는 듣기론 controller, repository, service,..
1. 배포 쉘 스크립트 작성하기   CI/CD가 구축되지 않은 상황에서 변경사항을일일이 갱신해주고 재배포해주는 과정은 매우 번거롭다. CI/CD를 구축하는 것이 가장 현명한 방법이겠지만 '쉘 스크립트'를 사용하여 생산성을 높여보자!!  (1) 실행중인 애플리케이션 종료  현재 배포된 애플리케이션이 있다면 종료시키자! kill -15 명령어를 통해 서버를 중단시키는 것이 안정적이지만 시간이 너무 오래 소요된다면 kill -9를 통해 강제종료시키기로 하자! kill - 9 (SIGKILL) SIGKILL (Signal Kill) : 강제 종료 시그널로, 즉시 프로세스를 종료시킨다. 프로세스는 이 시그널을 무시하거나 이를 처리할 기회를 가지지 않는다.강제종료 방법은 프로세스가 정상적으로 종료되지 않거나 응답하..
1. EC2 배포(1) 배포(Deployment)란?  "기능 구현이 끝났으니 배포를 해보자!" 이때, 배포란 무엇일까? 배포(Deployment)란 쉽게 말해 다른 사용자들이 인터넷을 통해 서비스를 이용할 수 있게 하는 것을 의미한다. 프로젝트의 기능 구현과 테스트는 주로 localhost라는 주소를 통해 이루어진다. 하지만 이 localhost는 다른 컴퓨터에서는 접근이 불가능한 로컬 주소이다. 따라서  배포를 통해 도메인(ex. https://www.naver.com/)나 IP(ex. 124.16.2.1)와 같이 고유의 주소를 부여받아 다른 컴퓨터의 접근을 가능하게 한다.  (2) EC2(Elastic Compute Cloud)란?  EC2란 쉽게 말해 다른 컴퓨터를 빌려 원격으로 접속해 서비스를 ..
· Backend
1. 새롭게 배운 내용들(1) ⭐️⭐️ 외부 API 사용할 때는? Rest Client!스프링 공식 사이트 및 카테캠 nextstep 자료 참고⭐️ 스프링 프레임워크를 사용한 애플리케이션에서 외부 API와 통신할 수 있는 방법은 무엇이 있을까?통신할 수 있는 방법인 HTTP 클라이언트는 RestClient, WebClient, RestTemplate이 있다.RestClient란?스프링 6.1에 도입된 동기식 HTTP 클라이언트 애플리케이션. 템플릿 메서드 API를 제공하는 RestTemplate과는 달리 보다 유연한 API를 제공한다. ⭐️ Java 객체를 편리하게 HTTP 요청에 매핑하고, HTTP 응답을 Java 객체로 변환하여 처리할 수 있다. ⭐️ ⭐️  따라서 핵심은 외부 API 명세서를 잘 읽..
1. 이번주 궁금증들(1) 기능 구현 후 테스트 코드를 작성하는 것까지는 알겠어. 그런데 내 테스트 코드가 정말 좋은 테스트 코드일까?양재현 멘토님 : 현업에서는 코드 커버리지 검사 결과가 최소 80% 이상이 나오게 테스트 코드를 작성하는 것을 목표로 합니다. 코드 커버리지란 : 소프트웨어의 테스트 케이스가 실제 코드를 얼마나 반영하는지 나타내는 지표 중 하나 라인 커버리지 : 코드 한 줄이 한 번 이상 실행된다면 충족결정 커버리지(브랜치 커버리지) : 모든 조건식의 내부 조건이 true/false를 가진다면 충족조건 커버리지 : if 조건문 안의 개별 조건식이 true/false인 경우 모두 실행되었을 때 충족. 사실상 결정 커버리지보다 더 detail한 커버리지인 것 스프링에서 Jacoco 라이브러리..
1. 이번주 궁금증들(1) Spring 환경에서 HTTP 요청과 응답을 JSON 형식으로 주고받는 방법은 무엇인가?일단, JSON(Javascript Object Notation)이란 무엇일까? 어떤 언어에서든 해석 가능한 데이터 교환 형식. 그렇기에 대부분의 프로그래밍 언어에서 쉽게 생성하고 파싱할 수 있는 형식이다.간단하고 가벼운 데이터 형식으로 텍스트 기반의 직관적인 데이터 표현 방식요청(Request) : 클라이언트에서 서버로 JSON 형식의 요청을 보내는 경우, 이를 객체로 변환하기 위해 @RequestBody 사용응답(Response) : @RestController를 사용한다면 controller 내 모든 메서드가 응답을 JSON 형식으로 자동 변환@RestControllerpublic cl..
pykido
'Backend' 카테고리의 글 목록