분류 전체보기 247

[Spring Boot] 동시성 제어 (1) - 동시성 문제, 재고 감소 시스템 구현 및 테스트

** 본 글은 인프런 재고시스템으로 알아보는 동시성이슈 해결방법> 을 수강한 후 작성한 글입니다.동시성 문제를 해결하지 않으면?Race Condition!→ 두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 같지 않고 달라지는 상황재고 감소 시스템 구현 및 테스트재고 감소 로직 작성엔티티 생성 package com.example.stock.domain; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; impo..

✏️/Spring 2024.11.09

[JPA] 엔티티 equals 메서드 구현 시 주의할 점

개발 진행 중, 프론트 분께 아래와 요청을 받았다.해당 내용을 확인해보니, Member에 equals 메서드를 이렇게 구현하고 있었다.@Overridepublic boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Member member = (Member) o; return Objects.equals(idMember, member.idMember);}프린트 찍어보니까하나는 프록시 객체라서 false를 반환했던 것..!그래서 하이버네이트 객체의 클래스를 불러오도록 수정해줬다.@Overridepublic boolean equals(Ob..

✏️/Spring 2024.11.08

[JPA] Join Fetch 시 MultipleBagFetchException

문제프로젝트를 진행하다가org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags이런 에러가 떴다.원인하나의 Member 엔티티에서@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)private List profileImages;@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)private List fevers;두 개의 OneToMan..

✏️/Spring 2024.11.07

[Spring] OpenFeign 사용해보기

💡 OpenFeign이란?Netflix에 의해 처음 만들어진 Declarative(선언적인) HTTP Client 도구로써, 외부 API 호출을 쉽게할 수 있도록 도와준다. Open Feign은 인터페이스에 어노테이션들만 붙여주면 구현이 된다. 이러한 방식은 Spring Data JPA와 유사하며, 상당히 편리하게 개발을 할 수 있도록 도와준다.라이브러리 추가ext { set('springCloudVersion', "2023.0.1")}dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" }}dependencies { ..

✏️/Spring 2024.05.22

[JPA] 엔티티 생성 시 생겼던 문제들 (식별관계 문제)

📍 EnjoyTrip 프로젝트에서 엔티티를 만들 때 생겼던 문제 기록 우선 나는 계속 안드로이드 개발 + 짜잘한 것만 깔짝깔짝 대다가.. 백엔드 개발을 한지 얼마 안 된 상태였다.첫 프로젝트에서는 다른 팀원분께서 엔티티를 만들었고, 나는 JPA를 익히는데 더 집중해서 개발을 했다. 이 프로젝트에서는 기존 ㅆrㅍi에서 준 Dump 파일이 이미 존재했고, MyBatis를 이용하여 프로젝트를 진행하면 됐는데,우리는 어차피 2학기 때 JPA를 쓸 것이기 때문에 미리 연습해보자. 라는 취지로 JPA로 프로젝트를 바꿔서 진행했다.따라서 엔티티를 만들어야 했는데, 그것을 내가 하기로 했다. 이땐 처음이라 연관관계 설정하는게 어려웠다.특히나 ㅆrㅍi에서 준 Dump 파일을 그대로 넣고 + 우리의 커스텀 기능을 만들어..

✏️/Spring 2024.03.17

Gitlab + Docker + Jenkins 이용한 스프링부트, 리액트 프로젝트 자동 배포

EC2 접속 ssh -i ./pem키 ubuntu@ec2주소권한 오류가 뜬다면? Permission denied (publickey) chmod 400 pem키  Docker 설치 오래된 버전 삭제sudo apt-get remove docker docker-engine docker.io containerd runcRepository 설정sudo apt-get updatesudo apt-get install ca-certificates curl gnupg lsb-releasecurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho..

✏️/Server 2024.02.25

Docker를 이용하여 Spring Boot 배포해보기

| 실습 환경: MacOS, M1🐳 Docker란?로컬에서 서버에 올릴 때 문제 발생 ⇒ 도커 탄생!각종 디펜던시 설정의 번거로움디펜던시들의 버전 불일치 문제애플리케이션을 패키징 할 수 있는 툴컨테이너에 애플리케이션 + 시스템 툴 + 환경 설정 + 디펜던시를 하나로 묶어 어디에서나 쉽게 배포하고 안정적인 구동을 도와준다.구성 요소Dockerfile - 컨테이너를 어떻게 만들어야 하는지에 대한 설명서Image - 애플리케이션을 실행하는데 필요한 코드, 런타임, 환경, 시스템 툴, 시스템 라이브러리 등이 포함Container - Image를 고립된 환경에서 개별적인 시스템 안에서 실행할 수 있는 공간 🔌 배포 실습1. Docker 설치https://www.docker.com/products/docker-..

✏️/Server 2023.12.30

[MySQL] 프로시저

저장 프로시저(Stored Procedure)란?일련의 SQL문장을 선언해서 MySQL에 저장하고, 해당 SQL문을 함수처럼 사용하는것으로 만들어 두기만 하면 함수처럼 호출하여 편하게 사용할 수 있다.장점하나의 프로시저로 여러 SQL문의 실행이 가능하다. (모듈화)호스팅 언어와 SQL문이 분리되어 보수가 용이하다.네트워크 소요 시간을 줄일 수 있다. (구문 분석 및 코드 변환을 미리 진행하여 처리 시간이 단축됨)단점재사용성이 낮다. (DB 버전 별 구문 규칙과 호환성이 다름)처리 성능이 좋지않다. (MySQL 스토어드의 프로그램 처리 성능이 낮다) 실습1. 테이블 생성2. 프로시저 생성delimiter $$create procedure 이름 (매개변수)begin # SQL문end $$delimite..

✏️/Database 2023.12.30

Java 통신 인터페이스 실습

| 실습 환경: Spring Boot 3.2.1 / Java 17 / Gradle 1. HttpURLConnection 실습 ❓ HttpURLConnection HTTP와 관련된 기능을 지원하는 URLConnection URLConnection은 Java 애플리케이션과 URL 간의 연결 관련한 모든 클래스의 수퍼 클래스 Spring 같은 프레임워크 없이도 사용이 가능하다는 장점! 🔌 코드 private String baseUrl = "https://dapi.kakao.com/v2/local/search/keyword.JSON"; private String header = "Authorization"; @GetMapping("/http-url-connection") public JSONObject http..

✏️/Spring 2023.12.30

[AWS] EC2 스프링 부트 배포 중 트러블슈팅 기록

1️⃣ GitHub를 통해 프로젝트 코드 가져올 때 SSH Key를 생성해서 깃허브에 등록한 후 클론 과정에서 문제 발생원인: 사용자의 PC에서 해당 폴더에 대한 접근 권한이 없어서 발생하는 에러해결: 1) 권한 변경 -> 실패         2) sudo 붙여서 실행 -> 실패         3) web url 이용 -> 실패         4) sudo 붙여서 web url 이용 -> 성공대신 이렇게 하니 pull은 안 됐다🥲 수정 사항 있으면 파일 지우고 다시 클론하고 반복함 ㅜㅜ  2️⃣ ec2 접속 오류 (집에선 됐는데 밖에 나가니 안 됐다)원인: IP가 바껴서 생기는 오류라고 생각해서해결: 보안 그룹에서 인바운드 규칙 편집해서 ssh 포트 추가로 열어줬다.  3️⃣ gradlew 작동 에러 ..

✏️/Server 2023.06.26