Project/토이 프로젝트 30

[선착순 상품 구매 프로젝트] Pessimistic Lock(비관적 락, 선점 잠금), Optimistic Lock(낙관적 락, 비선점 잠금)으로 동시성제어하기

특정 시간대에 집중된 주문 요청이 발생하는 [선착순 상품 구매 프로젝트]를 진행하면서 동시성 문제를 맞땋드렸습니다. synchronized 키워드 활용, 낙관적 락, 비관적 락을 활용해 동시성 제어를 통합 테스트로 확인해보았습니다. 두 포스팅으로 나눠서 어떤 이유로 해당 방법을 사용했는지 저만의 문제 접근 방식을 기술해 보도록 하겠습니다. 1. [선착순 상품 구매 프로젝트] 자바 synchronized 키워드 적용으로 동시성 제어하기 2. [선착순 상품 구매 프로젝트] Pessimistic Lock(비관적 락, 선점 잠금), Optimistic Lock(낙관적 락, 비선점 잠금)으로 동시성제어하기 목차 문제 상황 문제 분석 해결 방법 구현 및 테스트 결과 아쉬운 점 및 한계점 향후 학습 문제 상황 주문/..

[선착순 상품 구매 프로젝트] 자바 synchronized 키워드 적용으로 동시성 제어하기

특정 시간대에 집중된 주문 요청이 발생하는 [선착순 상품 구매 프로젝트]를 진행하면서 동시성 문제를 맞땋드렸습니다. synchronized 키워드 활용, 낙관적 락, 비관적 락을 활용해 동시성 제어를 통합 테스트로 확인해보았습니다. 두 포스팅으로 나눠서 어떤 이유로 해당 방법을 사용했는지 저만의 문제 접근 방식을 기술해 보도록 하겠습니다. 1. [선착순 상품 구매 프로젝트] 자바 synchronized 키워드 적용으로 동시성 제어하기 2. [선착순 상품 구매 프로젝트] Pessimistic Lock(비관적 락, 선점 잠금), Optimistic Lock(낙관적 락, 비선점 잠금)으로 동시성제어하기 목차 문제 상황 문제 분석 해결 방법 구현 및 테스트 결과 아쉬운 점 및 한계점 향후 학습 문제 상황 주문/..

MyBatis와 JPA의 차이, JPA를 선택한 이유는

현재 면접 스터디를 진행 중에 있습니다. 개인 프로젝트 관련해서 받았던 질문들 중 대답을 잘하지 못했던 부분들은 따로 정리하고자 합니다. 질문 이력서에 기재된 두 포트폴리오를 통해 JPA와 Mybatis 모두 사용해 봤던데, 기술의 차이점이나 Mybatis나 JPA를 쓰실 때 어떤 이점을 기대하고 사용하신 건지 말씀해 주세요. 😅 어떤 생각으로 두 기술을 사용했냐면.. 국비 과정에서 팀 프로젝트를 할 땐 배웠던 게 Mybatis여서 다른 선택지를 고려하지 않고 사용했습니다. 그 당시 코드를 작성할 때 느꼈던 점은 여기저기 클래스마다 sql을 작성했기에 정작 중요한 로직을 한 눈에 파악하기 어렵고 복잡했다는 것입니다. 다행히 프로젝트는 성공적으로 끝났지만 유지보수를 어디서부터 해야 할지 막막해서 포기했습니..

JPA와 Spring data JPA 차이점 (+ Hibernate)

현재 면접 스터디를 진행 중에 있습니다. 개인 프로젝트 관련해서 받았던 질문들 중 대답을 잘하지 못했던 부분들은 따로 정리하고자 합니다. 질문 Skills 소개란에 JPA, Spring Data JPA 적혀있는데 둘의 차이점을 알고 있나요? 😅 사실.. 비슷해 보이는 용어의 차이점을 알고 있는지 확인하는 질문입니다. 개인 프로젝트를 진행하면서 JPA와 Spring data JPA를 사용했지만 그당시 명확한 차이점을 말할 수 없었습니다. 왜일까..? JPA 공부를 하다보면 EntityManager를 통해 entity관련 CRUD를 한다고 나와있습니다. 하지만 저의 경우 실제 애플리케이션 코드 구현시 EntityManager를 사용하지 않고 Repository 인터페이스를 사용했었는데요. 이유가 어떻든 사용..

JPA Entity클래스에서 id를 int가 아닌 Long 타입으로 하는 이유

현재 면접 스터디를 진행 중에 있습니다. 개인 프로젝트 관련해서 받았던 질문들 중 대답을 잘하지 못했던 부분들은 따로 정리하고자 합니다. 질문 코드를 봤는데, 개인 프로젝트에서 엔티티 id가 전부 int형을 썼던데 이유가 있었는지 궁금합니다. 🤔 해당 프로젝트를 할 때는 인지하지 못했지만, 다른 분들의 코드를 보면 JPA Entity 클래스에서 id를 Long타입으로 설정한 것을 심심치 않게 볼 수 있었습니다. 그런데 왜 long이 아닌 왜 Long타입을 사용했을까요? 구글링을 했을 때, 크게 두 가지 이유로 Wrapper Class(Long)을 선호한다는 것을 알게 되었습니다. 1. null을 사용할 수 있다. primitive type은 기본값이 0입니다. 그럼 id가 없을 때는 나타낼 수 없게 됩니..

[Error] Docker 컨테이너 연결시 : Communications link failure

언제 발생했는지 도커파일을 도커이미지로 빌드 후 도커 컨테이너 생성 및 실행하는 과정에서 에러가 발생했습니다. docker run [도커허브 아이디]/[프로젝트명] -p 8080:8080 에러 메시지 에러 메시지는 다음과 같습니다. com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. Connection refused (Connection refused) ..... 맨 마지막 에러 메시..

[Docker] docker mysql 포트 충돌 에러 (feat. 3306)

도커 컨테이너 생성 시 3306 포트는 이미 사용 중이라 정상적으로 생성되지 못하고 에러가 발생했습니다. Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/networ k address/port) is normally permitted. cmd를 이용해 어떤 프로세스가 3306을 사용 중인지 확인해 보겠습니다. netstat -ano | findstr :3306 TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 5664 TCP..

[Cinemagram] 공통기능은 묶어보자 AOP, 마지막 확인 - (16)

이번 포스팅은 Cinemagram의 마지막포스팅입니다. 물론, 계속해서 리팩터링 하거나 기능을 추가할 예정이지만 우선 이렇게 막을 내리고 추후에 작업을 해서 올리도록 하겠습니다. AOP란? Aspect Oriented Programming의 약자로 관점 지향 프로그래밍입니다. 그렇다고 객체지향프로그래밍은 버리겠다는 것이 아니라 추가로 적용 가능합니다. 예를 들어보겠습니다. 로그인 기능, 회원가입 기능을 구현하고자 할 때 로직을 기술해 보면 다음과 같습니다. 핵심기능 로그인 로직 회원가입 로직 1. username, password입력 1. username, password, email, name입력 2. DB에 SELECT쿼리 보냄 2. DB에 INSERT함 3. 로그인(세션) 두 기능의 핵심기능은 다르..

[Cinemagram] 댓글 등록 및 삭제 - (15)

이번 포스팅에서는 댓글(Commnet) 등록과 삭제 기능 구현을 하겠습니다. 댓글 모델 만들기 어떤 필드가 필요할까요? 누가 어떤 내용을 어떤 이미지에 몇 시에 적었는지 이렇게 필드를 구성한 후 연관관계를 잡아주면 됩니다. Comment @NoArgsConstructor @AllArgsConstructor @Getter @Entity public class Comment extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(length = 100, nullable = false) private String content; @JoinColumn(name = "userId")..

[Cinemagram] 소셜 로그인 (구글, 네이버) 및 NFT 이미지 추가 - (14)

요즘 방문하는 사이트를 보면 소셜로그인 하나만 딱 해둔 곳보다 구글, 네이버, 페이스북 등등 이렇게 여러 옵션을 제공해 주는 곳들이 많습니다. 그래서 이번 포스팅에서는 네이버 소셜 로그인 구현을 추가로 해보려고 했습니다만.... 그전에.... 이전 구글 소셜 로그인 커밋을 삭제했습니다. 😂😂😂 구글 소셜 로그인 포스팅에는 위와 같은 +추가를 적어뒀고 어떤 일이 있었고 어떻게 해결했는지에 관해서는 이 포스팅에 기재했습니다. 혹시 관심 있으시다면 참고하셔도 좋을 것 같습니다. OAuth2.0 관련 모든 코드가 사라져서, 다시 작업 후 리팩토링 진행하도록 하겠습니다. 🤦‍♂️ 👨‍💻👨‍💻👨‍💻👨‍💻👨‍💻👨‍💻👨‍💻👨‍💻👨‍💻👨‍💻... 구글 소셜 로그인으로 push했습니다. 네이버 API 등록 먼저 네이버 오..