inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

DDD 적용시 JPA 설계에 대해 궁금한 사항

해결됨

실전! 스프링 데이터 JPA

안녕하십니까 강사님. 좋은 강의 정말 감사합니다. 이번에 강사님께 강의를 듣고 현업에 적용하는 도중 궁금한 사항이 있어 문의하게 되었습니다. 저희는 현재 DDD 를 적용하려고 합니다. DDD 에서는 애그리거트끼리의 관계를 맵핑하는 것을 지양하는 것으로 알고 있습니다. 따라서 저희는 ERD 기준으로 도메인을 설계해보니 실제 나온 도메인을 보면 테이블이 전부 도메인 클래스가 되었고 서로간의 관계를 코딩으로 맺는 부분 (@ManyToOne 등)이 존재 하지 않습니다. 현업에서도 ERD 를 기준으로 도메인 클래스를 나누면 테이블 당 하나의 애그리거트가 나오는 것이 보편적인 사항일까요? DDD 로 개발하다보면 도메인 클래스에 관계를 맺는 부분이 없는게 보편적일까요?

  • java
  • spring
  • spring-boot
  • jpa
김가가가 댓글 2 좋아요 0 조회수 1310

IoC != DI에 대한 질문입니다.

해결됨

Java/Spring 주니어 개발자를 위한 오답노트

안녕하세요,선생님 습하고 더운 여름 몸 건강히 계시길 바랍니다. 강의를 듣는 도중 궁금한 부분이 생겼습니다. DIP와 IoC가 다르다고 말씀하신 부분이, DIP가 의존성 주입을 역전함으로써 제어의 흐름을 바꾸지만 IoC가 의존성을 주입해주는 것은 아니어서 그렇다고 이해되는데 제대로 이해한 게 맞을까요? ㅜㅜ 또, Open-Closed 법칙을 설명해주시는 1:32초 부분에 수정에는 열려있어야 한다는 말씀을 하셨는데 수정 시 많은 메소드 혹은 클래스를 수정해야 하는 경우가 수정에 열려있는 것이 아닌지요 ㅜㅜ... 제가 잘 모르다보니 헷갈려서 질문드립니다!

  • java
  • spring
  • 객체지향
  • 소프트웨어-테스트
nsonestudy2 댓글 2 좋아요 1 조회수 855

1-4) 운영 DB 연결 테스트 에서 rds 연결에러

미해결

지금 당장 데브옵스 AWS

$ npm run start > saju-backend-nodejs@1.0.0 start > cross-env NODE_ENV=prod PORT=3000 node server.js 3000 번 포트에서 대기중 ConnectionRefusedError [SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:3306 at ConnectionManager.connect (C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\node_modules\sequelize\lib\dialects\mysql\connection-manager.js:92:17) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async ConnectionManager._connect (C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:222:24) at async C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:174:32 at async ConnectionManager.getConnection (C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:197:7) at async C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\node_modules\sequelize\lib\sequelize.js:305:26 at async MySQLQueryInterface.tableExists (C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\node_modules\sequelize\lib\dialects\abstract\query-interface.js:102:17) at async Function.sync (C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\node_modules\sequelize\lib\model.js:939:21) at async Sequelize.sync (C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\node_modules\sequelize\lib\sequelize.js:377:9) { parent: Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16) { errno: -4078, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 3306, fatal: true }, original: Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16) { errno: -4078, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 3306, fatal: true } } C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\server.js:29 throw new Error("Mysql 연결 에러!"); ^ Error: Mysql 연결 에러! at C:\Users\User\Desktop\saju\saju-backend-nodejs-master\saju-backend-nodejs-master\server.js:29:13 at processTicksAndRejections (node:internal/process/task_queues:96:5) npm run start 하면 에러가 나요 컴퓨터를 껐다가 켜도 에러가 납니다.. 코드는 아래와 같은데 틀린 부분이 있을까요? JWT_SECRET= test2022 DEV_DB_HOST= saju-db-prod.c5d7ias6lj0q.ap-northeast-2.rds.amazonaws.com DEV_DB_DATABASE= saju-db-prod DEV_DB_USERNAME= admin DEV_DB_PASSWORD= liUvR09EgxX5xgPU9ilE DEV_DB_PORT= 3309 TEST_DB_HOST= TEST_DB_DATABASE= TEST_DB_USERNAME= TEST_DB_PASSWORD= PROD_DB_HOST= PROD_DB_DATABASE= PROD_DB_USERNAME= PROD_DB_PASSWORD= PROD_DB_WRITER_HOST= PROD_DB_READER_HOST= SLACK_KEY=

  • aws
창훈 댓글 1 좋아요 0 조회수 710

Amazon VPC Flow Logs의 대상 자원 선택에 대해 질문드립니다.

해결됨

CloudNet@ - AWS 네트워킹 입문

VPC Flow Logs의 대상 자원 선택에 대해 질문드립니다. 섹션 11인 VPC Flow Logs를 수강한 상태입니다. 섹션 11 강의 서두에서 네트워크 접근 제어 시스템을 통해 허용한 트래픽이나 거부한 트래픽을 VPC Flow Logs를 통해 확인한다고 말씀해주셨는데요. 그리고 VPC Flow Logs에 대해 설명해주실 때 'VPC에 속한 네트워크 인터페이스에 대한 송수신 트래픽 흐름 정보를 수집한다'라고도 설명해주셨습니다. 여기서 VPC Flow Logs가 트래픽 정보를 수집하는 대상에 대해 궁금한 점이 있습니다. VPC에 속한 네트워크 인터페이스에 대한 송수신 트래픽 흐름 정보를 수집하는 것인지 VPC에 속한 네트워크 접근 제어 시스템에 대한 송수신 트래픽 흐름 정보를 수집하는 것인지 위 두개가 좀 헷갈리는 상황입니다. VPC Flow Logs는 정확히 어떤 대상에 대해 트래픽 정보를 수집하는건가요?

  • 네트워크
  • aws
김태윤 댓글 1 좋아요 0 조회수 351

안녕하세요. 호돌맨님. 서비스 정책 로직 위치에 대해 궁금한 점이 있습니다.

해결됨

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

좋은 강의 정말 감사드립니다. 강의 수강 도중 서비스 로직 관련 궁금한 점이 있어 문의드리게 되었습니다. 제가 DDD 를 공부하면서 알게된 부분이 DDD 에서는 비즈니스 로직을 도메인에 몰아서 작성하라고 했는데 본 강의에서는 절대 서비스 정책을 도메인에 둬서는 안된다고 말씀하신 걸로 알고 있습니다. 호돌맨님께서 말씀하신 서비스 정책을 두지 말라는 조언은 DDD를 적용하지 않았기 때문인지 두지 말라고 하신건지 알고 싶습니다. (서비스 정책 == 비즈니스 로직으로 이해했습니다. 혹시 제가 이해한 부분이 잘못 됐을까요?) 감사합니다.

  • vue.js
  • aws
  • spring-boot
  • jpa
  • spring-security
김가가가 댓글 1 좋아요 0 조회수 673

UserLoanHistoryRepository 에서 Cannot resolve property 'isReturn' 경고

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

package com.group .libraryapp.domain.user.loanhistory; import org.springframework.data .jpa.repository.JpaRepository; public interface UserLoanHistoryRepository extends JpaRepository<UserLoanHistory , Long> { boolean existsByBookNameAndIsReturn(String bookName, boolean isReturn); } 함수 existsByBookNameAndIsReturn 부분에서 IsReturn 부분이 Cannot resolve property 'isReturn' 이라는 경고문이 뜨는데요, 엔티티 매핑을 그대로 잘 해주었는데도 동일한 경고문이 뜹니다. 혹시 몰라서 @Column(name = "is_return", nullable = false) private boolean isReturn; 를 추가해주었지만 동일한 경고문이 뜨네요. 동작은 잘되는데 왜그런지 너무 궁금합니다. and 뒷절에 다른 컬럼을 넣어봤는데요 다른 컬럼은 잘 인식하나, isReturn만 인식을 못하고 있는거 같습니다... ㅠㅠ

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
지웅 댓글 2 좋아요 1 조회수 652

전 나뭇잎 아이콘이 안떠요 ㅠㅠ

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

왜 안뜰까요 ㅠㅠ흙흙

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
title.jjk 댓글 1 좋아요 1 조회수 591

예외 처리 리팩토링 질문

해결됨

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

안녕하세요. 강의 들으며 재밌고 공부하고 있습니다. 감사합니다. 예외 처리를 util패지키에 모아서 처리하는 것은 이해했습니다. 약간 궁금증 생겨서 문의 남겨봅니다! BookService의 코드 일부분 입니다. 여기서 보면 UserRepository 와 BookRepository 의 findByName 에서 모두 fail()로 예외 처리를 하는데요, 이걸 그냥 리포지토리 계층의 메서드 자체에서 예외를 처리해주면 더 깔끔하지 않을까 하는 궁금증이 생겼습니다. 제가 지금까지 공부하면서는 리포지토리 계층에서 디폴트 메서드를 통해서 처리하는 코드도 봤고, 서비스 계층에서 처리하는 코드도 봐서 어떤 방식을 선호하시는지, 권장 하시는지 궁금합니다! 좋은 강의 감사합니다!

  • java
  • spring
  • kotlin
  • spring-boot
  • 리팩토링
장대영 댓글 1 좋아요 4 조회수 936

yum install nodejs npm --enablerepo=epel 이 설치가 되지 않습니다.

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 번외편: AWS로 시작하는 서버 운영

ExampleServer 폴더를 만든 후 cd ExampleServer 한 후 yum install nodejs npm --enablerepo=epel 를 쳤는데 Error: Unknown repo: 'epel' 다음과 같은 오류메시지가 뜨고 설치가 되지 않습니다.

  • linux
  • aws
beginner 댓글 1 좋아요 0 조회수 347

EC2인스턴스에 SSH 접근이 안됩니다.

미해결

CloudNet@ - AWS 네트워킹 입문

No supported authentication methods available (server sent: publickey,gssapi-keyex,gssapi-with-mic) 위의 메시지가 발생했습니다. 이 경우에 SSH key를 다시 발급 받아야 되나요? 그리고 SSH key에 유효기간이 있나요?

  • 네트워크
  • aws
김진한 댓글 1 좋아요 0 조회수 4950

VPC 접속시 다음 이유 중 하나로 인해 원격 데스크톱을 원격 컴퓨터에 연결할 수 없습니다.

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 번외편: AWS로 시작하는 서버 운영

ec2인스턴스를 그냥 만들어서 연결하면 잘 연결되는데 내가 만든 vpc,subnet을 사용하여 연결하면 다음 이유 중 하나로 인해 원격 데스크톱을 원격 컴퓨터에 연결할 수 없습니다. 1)서버에 대한 원격 액세스를 사용할 수 없음 2)원격 컴퓨터가 꺼져 있음 3)네트워크에서 원격 컴퓨터를 사용할 수 없음 원격 컴퓨터가 켜져 있으며 네트워크에 연결되어 있는지 여부 및 원격 엑세스가 지원되는지 확인하십시오. 라는 메시지가 뜹니다. 인스턴스는 실행 중 상태입니다. vpc ipv4 CIDR 주소가 10.0.0.0/24 로 되어있는데 상관있을까요? 10.0.0.0/16 으로 해도 되지 않습니다. SUBNET 주소도 10.0.0.0/24 로 되어있습니다. 인터넷 게이트웨이가 생성되어 있지 않은거 같은데 별도로 생성해 주어야 될까요? 게이트웨이를 추가해서 vpc를 연결해줘도 안되는거 같습니다. EC2 인스턴스 생성과정이 강의버전하고 달라서 따라하기가 좀 힘든거 같습니다.

  • linux
  • aws
beginner 댓글 1 좋아요 0 조회수 1114

AWS 강의를 듣고, 7장의 완성 게임을 배포하는 것이 가능한가요?

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 번외편: AWS로 시작하는 서버 운영

번외편 AWS 강의를 완강하면, 7장에서 완성한 게임을 AWS에 올려서 배포하는 과정을 따라해볼 수 있을지 궁금합니다. 내용 목차를 보면 그게 아닌 것 같아서요... 혹시 거기까지는 안내가 되어있지 않다면 강의를 다 듣고 충분히 혼자서 해볼만할지 궁금합니다.

  • linux
  • aws
아데니아 댓글 1 좋아요 0 조회수 446

public interface UserRepository extends JpaRepository<User,Long> 코드 질문이요

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요 질문 드릴게 있습니다 JpaRepository<User,Long> 이 부분에서요 제네릭에 엔티티객체인 User를 넣는건 알겠는데요 Long을 넣는 이유가 혹시 id가 기준이라서 Long을 넣는건가요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
자바마스터하자 댓글 1 좋아요 2 조회수 487

인텔리제이 같이 설치하는 과정부터 좀 알려주시면 안될까요 너무 답답하고 짜증나죽겠습니다

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 몰라요 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 여기에 질문 내용을 남겨주세요. 처음하는 초심자 입장에서 너무 어렵습니다 일단 설치부터 jdk까지는 꾸역꾸역 구글링해서 깔고했는데 인텔리제이를 설치하고 설치하는 과정에서 어떤 체크사항을 체크해야하고 어디에 저장하고 하는지 하나도 모르고 그냥 "인텔리제이 설치하시오", "자바 jdk 설치하시오" 미리 준비물로 딸랑 해놓고 지금 혼자 깔고 인텔리제이 실행해서 강사님이랑 똑같이 하려는데 처음 run하는것부터 run이 보이지도 않고 막히네요 무료강의도 아니고 돈내고 듣는데 너무 짜증나고 답답합니다 이 질문도 한참있다가 질문답변이 달릴테고... 극초심자를위한 설치부터 하나하나 같이 알려주고 하는방법좀 설명해주셨으면 좋겠습니다 시간아깝고 짜증납니다 정말

  • java
  • spring
  • mvc
  • spring-boot
임규영 댓글 0 좋아요 2 조회수 1026

인터셉터 활용?

해결됨

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

안녕하세요 호돌맨님! JWT 관련 강의에서 ArgumentResolver를 활용해 토큰 검증을 하고 사용자 정보를 추출해 반환하셨는데, 만약 프로젝트를 진행할 때 로그인을 해야 모든 URL에 접근할 수 있다고 한다면 아래 코드처럼 인터셉터에서 토큰 검증을 하고 ArgumentResolver에선 별다른 검증 없이 subject만 추출해서 반환해도 문제가 없을까요? 혹시 제가 접근 자체를 잘못하고 있다면 알려주시면 감사하겠습니다 @Slf4j @RequiredArgsConstructor public class LoginCheckInterceptor implements HandlerInterceptor { private final JwtService jwtService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String requestURI = request.getRequestURI(); log.info("인증 체크 인터셉터 실행 {}", requestURI); String accessToken = request.getHeader("Authorization"); jwtService.validateAccessToken(accessToken); try { jwtService.getSubject(accessToken); } catch (JwtException e) { throw new Unauthorized(); } return true; } } @RequiredArgsConstructor public class JwtArgumentResolver implements HandlerMethodArgumentResolver { private final JwtService jwtService; @Override public boolean supportsParameter(MethodParameter parameter) { boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class); boolean hasLoginType = LoginUser.class.isAssignableFrom(parameter.getParameterType()); return hasLoginAnnotation && hasLoginType; } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { String accessToken = webRequest.getHeader("Authorization"); Long userId = jwtService.getSubject(accessToken); log.info("userId = {}", userId); return new LoginUser(userId); } }

  • vue.js
  • aws
  • spring-boot
  • jpa
  • spring-security
민혁 댓글 2 좋아요 0 조회수 737

낙관 락 vs 비관 락 실무에서 구체적인 예시를 들어주실 수 있을까요?

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

낙관 락과 비관 락을 정확히 언제 사용하는지 궁금한데요, 충돌이 잦을 때는 비관 락을 사용한다고 이해하기엔 막연한 느낌이 있어서요, 혹시 실무에서 구체적인 예시를 들어주실 수 있을까요?? 비관적 락이 구현이 훨씬 간단할 것 같은데, 실제로 실무에서 비관적 락이 아닌 낙관적 락을 직접 구현해서 사용할 일이 있는지도 궁금합니다. 충돌이 빈번하게 일어난다면 비관적 락이 더 적합할 수 있다고 하셨는데 이유가 뭔가요? 어떤 부분에서 성능상 이점이 있는지 궁금합니다. 자세하게 설명해주시면 정말 감사할 것 같습니다. 감사합니다!!

  • java
  • spring
  • 동시성
니나니노 댓글 2 좋아요 0 조회수 5549

1 - k 반례가 무엇인지 모르겠습니다. (JAVA)

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요. 큰돌님 강의 잘 듣고있습니다. 다름이 아니라 아래 코드에서 어떠한 이유로 통과가 안되는지 이유를 모르겠습니다. 감사합니다. public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] cnt = new int[26]; br.readLine().chars().forEach(i -> cnt[i - 'A']++); boolean checkOdd = false; char oddChar = '0'; StringBuilder sb = new StringBuilder(); for (int i = cnt.length - 1; i >= 0; i--) { if (cnt[i] == 0) continue; if (checkOdd && (cnt[i] & 1) == 1) { sb.setLength(0); // sb.append("I'm Sorry Hansoo"); break; } if ((cnt[i] & 1) == 1) { oddChar = (char) (i + 'A'); checkOdd = true; cnt[i]--; } for (int j = 0; j < cnt[i] / 2; j++) { sb.append((char) (i + 'A')); sb.insert(0, (char) (i + 'A')); } } if (Character.isLetter(oddChar)) { sb.insert(sb.length() / 2, oddChar); } System.out.print(sb.toString()); }

  • c++
  • 코딩-테스트
  • java
최찬호 댓글 2 좋아요 0 조회수 513

[13강] application.yml 파일 설정에서 문제가 있습니다.

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

강사님이 설명 해 주시는 대로 정말 다 따라했는데 안돼요.. 사용자 정보가 db에 등록이 안되어서 뭐가 문제인지 살펴봤는데 아래 driver-class-name 경로가 인식이 안됩니다.. 강사님은 ctrl 누르고 클릭하면 파일 경로로 이동이 되시던데 전 안되네요.. 나름대로 구글링 해서 해결책을 찾아봐서 몇 개 시도해 봤습니다. mysql connector 파일 따로 다운받아서 java 11 버전 lib 파일에 옮기고 외부 라이브러리 추가 해 줬습니다. build.gradle 파일에 의존성 코드도 추가해줬습니다. 그런데 해결이 안되네요... 뭘 잘못했나 싶어서 파일 새로 다운받고 강의도 처음부터 다시 들으면서 따라했는데 소용없고 mysql도 원래 깔려있었어서 지우고 다시 깔았습니다. 서버 run 하면 오류 안 뜨고 잘 돌아가고 웹 사이트도 접속이 잘 되는데 db 저장만 안 됩니다.. 런 로그입니다.. 오후 6:26:28: Executing ':LibraryAppApplication.main()'... > Task :compileJava UP-TO-DATE > Task :processResources UP-TO-DATE > Task :classes UP-TO-DATE > Task :LibraryAppApplication.main() . ____ _ /\\ / ___'_ __ ( _)_ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.6) 2023-05-30 18:26:34.455 INFO 268 --- [ main] c.g.libraryapp.LibraryAppApplication : Starting LibraryAppApplication using Java 11.0.17 on DESKTOP-A2F7K18 with PID 268 (C:\Users\djxka\Desktop\library-app\build\classes\java\main started by djxka in C:\Users\djxka\Desktop\library-app) 2023-05-30 18:26:34.460 INFO 268 --- [ main] c.g.libraryapp.LibraryAppApplication : No active profile set, falling back to 1 default profile: "default" 2023-05-30 18:26:35.842 INFO 268 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2023-05-30 18:26:35.884 INFO 268 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 18 ms. Found 0 JPA repository interfaces. 2023-05-30 18:26:37.789 INFO 268 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2023-05-30 18:26:37.808 INFO 268 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2023-05-30 18:26:37.809 INFO 268 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.69] 2023-05-30 18:26:38.079 INFO 268 --- [ main] o.a.c.c.C.[Tomcat].[ localhost ].[/] : Initializing Spring embedded WebApplicationContext 2023-05-30 18:26:38.080 INFO 268 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3479 ms 2023-05-30 18:26:38.455 INFO 268 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2023-05-30 18:26:39.011 INFO 268 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2023-05-30 18:26:39.095 INFO 268 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2023-05-30 18:26:39.259 INFO 268 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.14.Final 2023-05-30 18:26:39.640 INFO 268 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations { 5.1.2.Final } 2023-05-30 18:26:39.960 INFO 268 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect 2023-05-30 18:26:40.429 INFO 268 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2023-05-30 18:26:40.451 INFO 268 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2023-05-30 18:26:40.540 WARN 268 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2023-05-30 18:26:41.279 INFO 268 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2023-05-30 18:26:41.300 INFO 268 --- [ main] c.g.libraryapp.LibraryAppApplication : Started LibraryAppApplication in 8.059 seconds (JVM running for 9.476) 2023-05-30 18:26:49.558 INFO 268 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[ localhost ].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2023-05-30 18:26:49.559 INFO 268 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2023-05-30 18:26:49.561 INFO 268 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms 도와주세요ㅠㅜㅠㅜ

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
고은미 댓글 1 좋아요 1 조회수 1002

synchronized 와 @Transactional

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

안녕하세요 재고관리시스템 강의를 복습하며 내용을 정리하는 중 의문이 생겨 질문을 드립니다. 가장 처음에 application code 레벨에서만 동시성을 해결하기 위해 syncrhonized 를 사용할 경우 해당 메서드에는 @Transactional 을 붙여서는 안된다고 설명해 주셨습니다. 실제로 이를 붙일 경우, 동시에 decrease 메서드가 호출되고 해당 로직 내부로 들어가는 것이 가능함을 확인하였습니다. 그런데 여기서 제가 의문이 들었던 것이 있습니다. @Transacitonal 을 사용할 경우 Spring AOP 에 의해 매 번 다른 proxy 인스턴스를 통해 target object 로의 호출을 하게 됩니다. proxy 객체에 대한 lock 은 서로 다른 프록시들 사이에 공유되지 않는다고 하더라도, 내부적으로 호출되는 target 객체에 대한 decrease 메서드는 결국 동일한 객체에 대한 호출을 하기 때문에, 공유되는 lock 에 대한 경쟁이 일어나는 것이 아닌가 생각이 들었습니다. 최종적으로는 target 객체에 대한 synchronized 메서드를 호출하는 것이라면, 단 하나의 스레드만 임계 영역에 들어갈 수 있어야 할 것 같은데, 그렇지 않음을 확인하였습니다. 왜 이런 일이 일어나는 것인지 이해가 잘 되지 않습니다 ㅠㅠ 이와 관련해서 어떤 키워드로 공부해보면 좋을지 추천 가능할까요..?

  • java
  • spring
  • 동시성
  • synchronized
  • @transactional
스빈스빈별 댓글 2 좋아요 0 조회수 1315

Service에 @Transactional(readOnly=true)는 필수적으로 넣어줘야 하는 것인지 궁금합니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 클래스 영역에서 트랜잭션을 걸어두는 것이 필수적인 내용인지 궁금합니다! 실무에서도 마찬가지로 동일하게 클래스 영역에 사용해서 적용하게 되는 것일까요? 저는 작업할 때 수정이 필요한 메서드에만 @Transactional을 선언해줬었는데 이렇게 처리했던 부분들이 잘못된 부분이었던 것인지 고민이 되어 질문드리게 되었습니다. 정리하자면 클래스단에서 무조건 '@Transactional(readOnly=true)' 를 작성해주는 것을 권장한다면 그렇게 해야하는 이유가 무엇인지 궁금하고, 무조건 걸었을 때 매번 '@Transactional(readOnly=true)' 값을 작성해줘야 하는데 매번 작성하지 않을 수 있는 방법은 없을지 궁금합니다. 감사합니다!

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
chaerin920 댓글 1 좋아요 0 조회수 722

인기 태그

인프런 TOP Writers

주간 인기글