전체 글

공부를 야무지게 해보겠습니다!! (알고리즘, 자료구조 문제 풀이 학습 및 기록)
📌 직무부트캠프 채팅 마이그레이션 백엔드 직무 체험 1주차 회고 채팅프로젝트 마이그레이션이라는 주제로 직무 체험에 참여했다. 주차별로 과제를 수행하고 제출 후 피드백을 받으며 진행된다. 과제를 수행하며 고민했던 내용들, 그리고 배웠던 점을 남겨놓으려고 한다. 📌 새로운 환경과 기술에 빠르게 적응하는 연습 # NestJs와 PostgreSQL 개발환경 세팅 프로젝트를 분석하고 앞으로의 마이그레이션 계획을 세우기 위해서는, 프로젝트를 내 로컬 환경에 세팅하고 프로젝트에 적응된 기술을 빠르게 습득해야 했다. 앞으로 개발자를 하면서 수많은 기술을 새로 접하게 될 것이고, 취업 후 직무에 투입된다면 빠르게 적응해 나가야 할 것이니, 이번 직무를 실전이라고 생각하고 수행하였다. 현재 나는 Java/Spring 환경..
📌 1. 문제상황 주문API에 대해 검토하던 중, 주문 상태 변경에 대해 데이터 경쟁 문제가 발생할 수 있다고 판단하였다. 마치 멀티쓰레드 환경에서 동시성 문제가 발생하는 것 처럼, 주문수락과 주문취소가 동시에 발생했을 때 운이 좋지 않으면 사용자에게는 주문 취소 요청이 되었다고 응답될 것이고, 음식점은 주문 취소된지 모르고 수락하여 처리해버리는 사태가 발생할 수 있다. 📌 2. 분석 실제로 이러한 데이터 경쟁문제가 발생하는지 확인하는 과정이 필요했다. 그래서 아래와 같이 주문수락 요청 후 10초정도 대기하면서, 주문 취소요청을 수행하도록 하였다. 1. 판매점 계정으로 주문 수락 하기 -> 2. 주문 수락 요청 후 10초안에 주문 요청자 계정으로 주문 취소하기 @Transactional public Or..
Security의 crypto라이브러리 사용하기 비밀번호 암호화를 위한 라이브러리 추가 회원 도메인의 회원가입 기능을 구현할 때, 비밀번호를 그냥 저장하기보다는 암호화를 해서 저장하면 보안성이 더 뛰어날 것이다. 암호화를 위해서 제공되는 여러 라이브러리들이 있는 것 같다. 대표적으로 crpto라이브러리가 있는데, spring-security모듈에도 포함되어있기 때문에, spring-security 의존성을 추가하였다. 우선 spring-security라는 모듈을 추가할 때, spring-boot의 자동설정 기능이 적용이 된다. 나는 여기서 암호화 기능만을 우선 적용하고 싶고, 별도의 security기능을 적용시키지 않을 예정이므로, 자동으로 설정되어있는 기능들중 필요없는 기능은 초기화해주던가 새로 설정을..
Food id값을 통해서 DB의 Food를 가져오는 서비스 로직이다. 이때 id에 해당하는 Food가 존재하지 않으면 예외를 발생시키도록 하였다. public FoodResponse get(Long foodId) { final Food food = foodJpaRepository.findById(foodId).orElseThrow(() -> new IllegalArgumentException(foodId + "id의 Food가 존재하지 않습니다."); } 이 상태로 어플리케이션을 실행시키고 존재하지 않는 id의 Food를 조회하도록 요청하면 아래와 같이 에러가 발생한다. 별도로 try-catch처럼 예외가 발생했을 때 어떻게 처리해 줄지 구현하지 않았기 때문이다. 응답데이터로는 아래처럼 받을 수 있는데,..
· Database
데이터베이스의 종류에는 계층형 데이터베이스, 네트워크형 데이터베이스, 관계형데이터베이스와 비관계형(NoSQL)데이터베이스가 있다. 이 중에서 관계형데이터베이스와 NoSQL데이터베이스를 가장 많이 사용한다. 각각 특징적인 부분이 명확하므로 어떠한 서비스 기능을 구현하느냐에 따라 적절한 데이터베이스를 선택할 필요가 있다. 📌NoSQL의 확장성 NoSQL의 가장 큰 특징은 수평적 확장이 가능하다는 것이다. 단순히 데이터베이스 서버개수를 늘리기만 해도 데이터베이스의 용량을 늘릴수가 있다. 수직적 확장이 컴퓨터의 성능(많은 RAM, 좋은CPU 등)을 올리는거라면 수평적확장은 말그대로 서버만 가져다가 붙이면 쉽게 확장이 가능하기 때문에 대용량 데이터를 저장하기에 수월하다는 장점이있다. 실제로 페이스북이나 트위터같이..
· Spring
📌 DDD설계와 SQL 중심 설계 도메인 주도 설계를 알려면 도메인이 무엇인가를 알아야 하는데, 도메인이란 소프트웨어로 해결하고자 하는 문제 영역을 의미한다. "e-book" 애플리케이션을 예로들면, "e-book" 자체가 도메인이 될 수 있고, 하위 도메인으로 될 수 있는 개념으로는 "책", "회원", "대출", "예약" 등이 있을 것이다. DDD 설계 DDD(Domain Driven Design)라고 부르는 도메인 주도 설계는, 이러한 도메인에 집중해서 설계를 하는 것이다. 어떤 도메인이 있는지 파악하고, 여러 하위 도메인들을 정의할 수 있다. 도메인에 집중해서 개발을 하면 서비스의 비즈니스 로직을 구현할 때 도메인 단위로 구현할 수 있다. e-book애플리케이션에서 "책"라는 도메인은 책목록을 조회..
· Spring
데이터를 다룰 때 사용하는 용어라 Entity, DTO, VO를 많이 사용하는데, 각각의 차이에 대해 알고 있으면 좋을 것 같다. 📌 Entity란? 엔티티는 데이터베이스에서 사용하는 용어로 식별이 가능한 객체라는 의미를 가지고 있다. 관계형 데이터베이스의 테이블에서는 기본키를 통하여 식별 가능하도록 객체를 구별하고 있다. 또한 데이터베이스의 테이블과 매칭되는 클래스를 Entity 클래스 라고도 부른다. 아래처럼 스프링 프레임워크는 어노테이션을 통하여 데이터베이스 테이블과 매칭하도록 설정할 수 있는데, 이때 데이터베이스와 매칭되는 역할을 수행한다고 해서 이 클래스를 Entity클래스라고 부른다. @Entity public class Phone { @Id private Long id = 1; private..
· Spring
📌 HTTP method란? HTTP method는 주어진 리소스에 대해 수행해 주기를 바라는 동작이다. 클라이언트가 HTTP method명시하고 서버에게 요청하면 서버는 해당 HTTP method 동작을 수행한다. 예를 들어 'GET /items' 는 "아이템목록들에 대한 정보를 조회하고 싶으니 정보를 가져와줘"라는 의미를 가지고 있다. 📌 HTTP method의 종류 서버는 필요한 HTTP method의 동작에 대해 구현할 수 있고, 별도로 HTTP method를 확장해서(커스텀해서) 사용할 수 도 있다. 아래는 대표적으로 사용하는 HTTP method의 종류이다. GET 서버에게 리소스 조회를 요청하기 위해 사용된다. POST 입력된 데이터를 서버에 전송하면, 서버는 해당 데이터를 처리한다. PUT..
https://school.programmers.co.kr/learn/courses/30/lessons/169199 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근1. bfs를 탐색을 하면서 최솟값을 갱신해 나간다. 최종코드 from collections import deque import sys def is_range(n, m, x, y): return 0
· Spring
📌 스프링 빈을 만드는 방법 2가지 스프링 컨테이너가 관리하는 객체를 스프링 빈이라고 한다. 스프링 빈으로 만들고, 스프링 컨테이너가 관리하도록 해보자. 스프링 빈을 만들려면 어떻게 해야 될까? 2가지 방법이 있다. @Component @Configuration + @Bean 1. @Component를 통해 Bean 등록하기 @RestController public class DemoController { @GetMapping(path = "/test") public String demo() { return "test"; } } // @RestController -> @Controller -> @Component 를 포함한다. @Target(ElementType.TYPE) @Retention(Retent..
Don't stop 훈
쉬지마 정지훈