New
-
[항해 플러스 백엔드] 6주차 회고 (WIL)
이번 한 주 동안 동시성 문제(Race Condition)을 해결하기 위한 방법들을 분석해보고 직접 구현해보았다.분석과정에서 추상적으로 이해했던 DB 락에 대한 이해도를 높힐 수 있었다. 덕분에 앞으로 DB락을 필요한 시점에 더 잘 활용할 수 있을 것이란 자신감이 생겼다. 1. 문제비관적락과 낙관적락의 경우 지속적으로 접해서 괜찮았으나 Redis와 Kafka는 처음 접했기 때문에 개념을 이해하기 어려웠다. 2. 시도Reds와 Kafka를 다루는 유튜브 영상과 블로그들을 살펴보았다. 3. 해결기술적 러닝커브때문에 Kafka에 대한 분석과 구현은 다음기회로 미루고 이번에는 DB락과 Redis 를 다루었다. 4. 알게된 것'분산 서버', 'NoSQL', 'in-memory' 등의 키워드 때문에 어렵게만 생각..
2024.11.02
-
[항해 플러스 백엔드] 4주차 회고 (WIL)
지난 주차는 서버의 정상 동작을 위해 필요한 기능 구현이 메인이 되는 한 주였다. 3주차 때 작성한 설계를 따라 코드를 작성하였는데, 설계를 만족하는 경우도 존재하지만작성 중간중간 설계를 수정해야하는 일이 종종 발생하였다. 이 과정에서'아... 설계를 꼼꼼하게 작성하지 못했구나'란 생각을 하게 되었다. 설계의 잦은 수정과 함께 개발 시간 지연에 영향을 준 요인은 도메인 모델과 JPA의 완전한 분리였다. 무엇이 문제였을까?domain 레이어의 도메인 모델 객체에서 JPA에 의존하는 요소를 완전히 제거하고,JPA에서 사용하는 도메인 엔티티는 infra 레이어에 위치시켰다.모델의 형태가 단순할 때는 상관 없지만 연관관계를 가질 때는 객체를 전환하는 게 다소 불편했다. 무엇을 했나?null체크를 통해 nu..
2024.10.21
-
[항해 플러스 백엔드] 3주차 회고 (WIL)
챕터2가 시작되었다. 챕터1에서 TDD와 클린아키텍처를 통해 어떻게 개발을 해야할 지 방법론에 대하여 배웠다면,챕터2에서는 챕터1에서 배운 내용들을 기반으로 실제 서버를 개발하는 방법을 다룬다. 이번 주는 앞으로 개발할 서버에 대한 시나리오를 선택하고시나리오에서 필요로하는 요구사항을 서비스하는 서버의 설계작업을 했다. 3주차에서 겪었던 문제...이번 주에 수행해야 했던 과제는 일반적으로 신규 개발에 들어갈 때 사전에 준비해야하는 작업들이었다. 1. 시나리오 선정2. 시나리오 요구사항 분석 (Milestone / 시퀀스 다이어그램 / 플로우 차트)3. 서비스 설계 (ERD 설계 / API 명세 / Mock API) 평소 회사에서 요구사항에 대해 깊은 고민없이 업무를 진행했었는데, 특히 시퀀스 다이어그램을..
2024.10.13
-
[항해 플러스 백엔드] 2주간을 되돌아 보며
Intro항해 플러스 백엔드 과정을 진행한지 2주가 지났다. 회사에 입사 후 모든게 낯설었던 시간이 지나고 회사 업무는 익숙함으로 다가왔다.새로움을 위해 이직을 꿈꾸었으나 마음처럼되지 않고 시간이 지나며 쌓이는 경력은내게 두려움으로 다가왔다. 챕터1을 마무리하며 (나의 목표는 안녕한가?)항해를 시작하며 다짐했던 목표 중 하나는 블랙배지를 받는 것이었다.(항해플러스는 매주 2개의 과제를 제출해야하며 10주간의 과제 20개에 대한 통과 결과에 따라 배지 색깔이 달라진다.)2주간 총 4개의 과제를 제출했고 다행히 모두 통과를 하였고,블랙배지로 가는 첫 걸음을 뗀 것 같아 동기부여가된다. 가장 기억에 남는 것개발자 업을 시작하고 약 3년 동안 동시성 제어를 신경쓰지 않고 개발을 했다.현재 재직중인 회사에..
2024.10.05
-
[Spring Framework] intellij에서 Spring legacy project 구성하기
STS 와 달리 Intellij에는 Spring legacy 프로젝트를 직접적으로 생성할 수 있는 템플릿이 존재하지 않는다. 이러한 이유로 Spring framework를 사용하기 위해 Maven의 Web application 구조에 맞추어 프로젝트를 구성해야 하지만, Intellij Ulitimate 라이선스에서 제공하는 Maven Archetype를 활용해 Spring Legacy 프로젝트를 좀 더 쉽게 구성할 수 있다. 1. Maven 프로젝트 생성 위 이미지 처럼 Maven Archetype을 Generators로 선택한 후 원하는 project 정보를 입력한다.Catalog를 Maven Central로 변경한 뒤 maven 프로젝트를 위한 Archetype을 받아올 수 있도록 설..
2024.09.07
-
[multipart/form-data] - MultipartFile과 JSON 함께 받기 (HttpMediaTypeNotSupportedException가 발생하는 이유)
이슈발생 Content-Type을 'multipart/form-data'로 설정한 HTTP 요청의 응답으로 415 Unsupported Media Type (HttpMediaTypeNotSupportedException)이 발생하였다. '파일'과 '복잡한 정보'를 함께 받아야하는 상황이었어서 "복잡한 정보를 JSON 구조로 파일과 함께 보내면 되지 않을까?"란 단순한 생각으로 한 메서드 설계가 원인이었다. 물론 파일과 정보파라미터들을 일반적인 form 형태로 전달해도 되겠지만 file과 JSON을 동시에 받을 수 없을까?란 의문을 해결하고자 한다. 따라서 스프링 MVC에서 Http Message를 어떻게 처리하는지 간단하게 살펴보고 과연 file과 json 데이터를 동시에 받는 작업은 정말 불가능한 일인..
2023.11.04
-
[Spring Security] session 동시 접속자 수 제한
Spring Security 스프링시큐리티는 스프링 기반 웹 어플리케이션에서 '보안'(security)구현을 위한 구조를 제공해주는 프레임워크이며 인증(Authentication)과 인가(Authorization)을 포함한 다양한 기능을 제공한다. 공개되지 않은 어플리케이션 정보에 접근하고자 하는 사용자는 인증이 필요하다. 웹어플리케이션에서 인증된 사용자의 정보는 세션(Session)이나 , JWT(JSON Web token)을 통해 관리할 수 있으며 스프링 시큐리티에서는 이와 관련한 여러 인터페이스를 지원한다. 개발중인 웹 어플리케이션에서 인증 / 인가 기능을 구현하기 위해 스프링 시큐리티를 사용하였는데 로그아웃 후 재 로그인을 하였을 때 로그인이 안되는 현상이 발생하여 스프링 시큐리티 설정하는 방법을..
2023.04.16
-
Tomcat 환경설정 (server.xml) - 컨텍스트 경로 설정
톰캣이란? Tomcat은 많은 Java 개발자들이 사용하고 있는 웹 어플리케이션 서버입니다. Tomcat은 웹 어플리케이션이 동작하여 서버의 역할을 할 수 있도록 서블릿 컨테이너를 제공하며 서버 운영에 필요할 수 있는 여러 환경설정 기능을 지원합니다. 스프링 기반으로 생성한 어플리케이션은 기본적으로 별도의 톰캣 서버의 설치가 필요하며 서버의 실행을 위해서는 정해진 경로*에 운영할 웹 어플리케이션을 위치시킨 후 톰캣서버를 실행시켜야 합니다. 반면 스프링 부트는 기본적으로 톰캣서버를 내장하고 있으며 별다른 설정 없이 배포한 Jar 파일을 실행하여 웹서버를 구동할 수 있습니다. 스프링부트를 이용할 경우 내장톰켓을 통해 별다른 설정 없이 손쉽게 웹어플리케이션을 배포하고 서버를 운영할 수 있지만 아직 War 파일..
2023.04.09
-
[환경 설정] 데이터 베이스 (DB) (H2)
1. 스프링 부트의 환경설정 Spring Boot에서는 외부 설정파일(application.properties 또는 application.yml)을 사용하여 Application에 필요한 환경정보를 설정할 수 있다. 2. 데이터 베이스 설정 DB 연결 정보는 아래와 같이 설정한다. spring: datasource: url: jdbc:h2:tcp://localhost/D:/h2/anywhere username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create-drop ... reference - https://spring.io/guides/gs/accessing-data-mysql/ 2-1. H2 사용하기 Jav..
2023.01.29
-
스프링 웹프로젝트 간편 생성 - spring initializr 사용하기
1. 스프링부트 시작하기 Spring initializr page - 스프링 부트 프로젝트를 간편하게 생성하도록 돕는 웹 사이트 https://start.spring.io/ 2. 의존성 설정 dependencies [Default Set] Spring Web - Spring MVC를 사용해 web application 기능 지원 (기본 내장 서버로 tomcat 을 사용) Spring Data JPA - JPA 관련 편의 기능을 제공하고 JPA 를 활용해 Database 접근 및 데이터 저장 H2 Database - 여러 데이터베이스 유형 중 하나, 개발용으로 많이 사용 Thymeleaf - Springboot에서 공식적으로 사용을 권장하는 템플릿 엔진 Lombok* - 개발의 편의성을 올려주는 라이브러리..
2023.01.25