inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이야기를 나눠요

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

@Value 어노테이션을 사용해서 KEY를 주입받고 싶을때!!!

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

호돌맨님의 강의를 정말 열심히 듣고 있는 학생입니다. 다름이 아니라 호돌맨님 강의와는 다른 방향으로 한번 KEY를 세팅해 볼 수는 없을까?? 라는 생각이 들었고 혹시나 저와 같은 문제를 마주친 분들 및 피드백을 받고 싶어서 글을 남깁니다. @Value 어노테이션을 사용하여 application.yml(프로퍼티) 파일에서 값을 가져오는 방법을 적용해 보았습니다. //application.yml spring: # secret properties profiles: include: secret //application-secret.yml jwt: secret: "ZxV0wmgRyU8ZGYBRITUGcaOi03osZK1bsy7qEUUjgBs=" KEY 값을 application.yml 과 분리시키기 위해 별도로 .yml 파일을 생성하여 저장하였습니다. //AuthController @Slf4j @RestController @RequiredArgsConstructor @RequestMapping("/api/auth") public class AuthController { private final AuthService authService; @Value("${jwt.secret}") private String KEY; ~~~~ } //AuthResolver @Slf4j @Component @RequiredArgsConstructor public class AuthResolver implements HandlerMethodArgumentResolver { private final SessionJpaRepository sessionJpaRepository; /** * TODO:jwt.secret 이 null 인 문제... * why??? */ @Value("${jwt.secret}") private String KEY; ~~~ } AuthController 와 AuthResolver 에 @Value 어노테이션을 사용하여 KEY 변수에 .yml 파일에 정의한 secret 값을 주입받게끔 코드를 작성하였습니다. 그러나 AuthController 에서는 정상적으로 .yml 파일에 정의해준 KEY 값이 주입이 되었지만 이상하게 AuthResolver 에서는 KEY 값이 null 이 나오더라구요... @Component 어노테이션도 적용해서 Bean 객체로 만들어줬는데도 말이죠 ㅠㅠ https://wildeveloperetrain.tistory.com/143 이 블로그에서 힌트를 얻을 수 있었습니다. 바로 WebMvcConfig 에서 AuthResolver 를 등록할때 new 연산자를 사용하여 새로운 인스턴스를 등록해주었기 때문이었습니다. new AuthResolver(sessionJpaRepository) //WebMvcConfig private final AuthResolver authResolver; @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { // resolvers.add(new AuthResolver(sessionJpaRepository)); resolvers.add(authResolver); } 그래서 new 연산자를 사용하는 것이 아닌 빈으로 등록된 인스턴스를 사용하여서 해결할 수 있었습니다. 다른분들에게 도움이 되셨으면 하는 마음에 글을 남깁니다. 혹시나 개선해야 될 점이 있거나 잘못된 부분이 있으면 댓글로 알려주시면 감사하겠습니다!!

  • vue.js
  • aws
  • spring-boot
  • jpa
  • spring-security
leeseongju 댓글 4 좋아요 0 조회수 995

기존 시스템에 대해서 개발중에 복합키에 대해서 문의드립니다.

자바 ORM 표준 JPA 프로그래밍 - 기본편

기존 시스템에 대해서 개발중에 복합키에 대해서 문의드립니다. pk가 id로만 구성된 연관관계가 아닌, pk가 복합키(key1, key2)로 구성된 연관관계에 대해서 궁금합니다. 구글링 결과 @IdClass, @EmbeddedId로 가능하다고 하고, 관련 자료도 찾아 보았으나, 명쾌하게 해결되지 않아 질문드립니다. 해결 방법중 @IdClass로 처리해 볼까하고, 이때 테이블 관계가 식별과 비식별 관계인 경우 궁금합니다. 식별관계인경우 비식별 관계인 경우 각각에 대해서 JPA로 Entity로 구현이 어떻게 되는지 궁금합니다. 감사합니다.

  • java
  • jpa
빈빠 댓글 1 좋아요 0 조회수 634

Lombok으로 인한 jar build failed 발생하시는 분

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

test path에서 Lombok을 사용 할 경우, jar Build 과정에서 Lombok으로 인한 Build Failed가 발생합니다. (CMD) Task :compileTestJava FAILED error: package lombok does not exist error: cannot find symbol @Getter, @Setter, ... ... 해당 경우, 아래와 같이 build.gradle에 의존성을 추가하면 해결 가능합니다. 참고하시면 좋을 것 같습니다. (build.gradle) dependencies { testCompileOnly 'org.projectlombok:lombok:1.18.22' //테스트 환경에서 주입 testAnnotationProcessor 'org.projectlombok:lombok:1.18.24' //테스트환경의 어노테이션 주입 }

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
김준기 댓글 1 좋아요 0 조회수 1329

미쳤다!!!

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

진짜... 자바부터 스프링 공부 많이했는데도 이해 1도 안가는 약간 돌대가리(?)가 아닐까 의심했는데.... 최태현님 강의 듣고 혼자서 백지 상태에서 코드 다 짤 수있게 됐어요 !! 그것도 이해를 하면서 !!! 미쳤습니다 ! 진짜 나만 알고싶은 숨은 강좌 !!! 강추강추 ~~ 레알 찐임

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
mrx 댓글 0 좋아요 2 조회수 672

h2연결이 안됩니다.

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

안녕하세요. 강의대로 h2 설치 및 실행, yml설정, 엔티티, 레파지토리, 테스트 실행했을 때, 쿼리가 날라가지 않습니다 ㅠㅠ 실행은 잘되지만, 콘솔에 테이블이 만들어지지 않습니다 .. application.yml은 spring: datasource: url: jdbc:h2:tcp://localhost/~/test username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: format_sql: true show_sql: true logging: level: org.hibernate.sql: debug 이렇게 작성했습니다. build.gradle도 추가해주었습니다. 왜 h2과 연동이 안되는지 아무리 찾아도 없습니다 ㅠㅠ

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
양희진 댓글 1 좋아요 0 조회수 525

5분 58초경 프로젝트 생성 화면이 내 PC 에 보이는 화면과 다를 경우, 해결법

자바 ORM 표준 JPA 프로그래밍 - 기본편

OMG 님 답변 참고하였습니다. 2022년 1월 1일부로 인텔리제이 프로젝트 생성 화면 변경됨. 위와 같은 화면으로 세팅 하시면 됩니다. (OMG 님 답변 : 메이븐 아키타입 말고 위에 보시면 New Project로 자바 버전(8), maven선택해서 진행하시면 됩니다 ^^ ) 강의에서 영한님께서 Groupid, Artifactid 작성하시는 부분은 하단의 Advanced Setting 을 클릭하셔서 입력하시면 됩니다. 강의에서 6분 40초경에 프로젝트 네임, 로케이션, 버전을 작성하시는 내용이 있는데, 이 구간 관련해서 아시는 분 계시면 댓글로 공유해주시면 좋을 것 같습니다. 다들 화이팅 입니다!

  • java
  • jpa
흰머리오목눈이 댓글 1 좋아요 0 조회수 607

터미널 h2.sh 실행시 permission denied 뜰 때 해결법

자바 ORM 표준 JPA 프로그래밍 - 기본편

터미널에서 h2 압축을 푼 폴더로 접근한다. 접근 명령어 : cd 폴더명 h2 압축을 푼 폴더에서 bin 폴더로 접근한다. chmod 755 h2.sh 라고 입력한다. 이 후 실행 시킨다 실행 방법 : ./h2.sh 입력. 이 후 강의에서 3분 34 초경에 발생하는 웹페이지를 확인할 수 있습니다.

  • java
  • jpa
흰머리오목눈이 댓글 1 좋아요 0 조회수 1001

왜 강의가 벌써 끝나있죠..??

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

살면서 이렇게 즐겁게 강의 들어본 적이 없는 것 같네요... 들으면서 남겼던 질문 3개도 너무 감동적으로 답변해주시고,, 62 강의 12시간 1분 동안의 시간동안 태현님과 진행한 공부가 정말 행복했습니다 이렇게나 훌륭한 강의 만들어주셔서 감사드리고 항상 행복만 가득하시길 바라겠습니다. 공부하는 개발자 최태현님 감사합니다!

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
jk s 댓글 0 좋아요 3 조회수 863

맥북 사양

실전! 스프링 데이터 JPA

곧 맥북 구매 예정인데 영한님께서 사용하시는 사양이 궁금합니다. (특히 ram) 혹시 알 수 있을까요?

  • java
  • spring
  • spring-boot
  • jpa
ko 댓글 1 좋아요 0 조회수 973

다음강의 문의 드려요~~

스프링 프레임워크는 내 손에 [스프2탄]

선생님 덕분에 좋은 회사에 취업해서 업무를 배우고있습니다~ 회사 입사 이후에도 퇴근 후 선생님의 좋은 강의를 계속 듣고 싶어서 문의드려요. 수강평에 3월쯤 오픈 예정이라고 답글 달려있는걸 보았는데 3월달에 다음강좌 오픈 확정인가요? 제가 선생님의 수업을 모두 들었지만 본의 아니게 Frontend로 가게되어 다음강의에 있는 React 부분이 너무 궁금해서 문의 남깁니다~~ 항상 감사합니다!

  • spring
  • jquery
  • mvc
  • jpa
  • spring-security
공부하는 별이 댓글 1 좋아요 0 조회수 448

안녕하세요 해당 강의를 보고 토이프로젝트를 진행하다 궁금한 점이 생겨 질문드립니다.

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

안녕하세요 항상 강의 잘 보고 있습니다. 다름이 아니라 영한님의 jpa강의를 토대로 제가 하는 토이프로젝트에 적용하는 과정에서 궁금한 점 몇가지가 생겨서 질문드립니다. application.yaml파일에서 ddl-auto: create-drop으로 했을때 콘솔창에서는 해당 테이블이 없다면서 자꾸 오류가 났었습니다(콘솔에서는 오류가 나오나 DB상으로는 적절하게 테이블이 생성되었음). 그러나 먼저 ddl-auto: create로 해당 테이블들은 생성해놓고 그 다음 update를 하니 오류없이 동작했습니다. 강의를 들을때는 그러지 않았던것 같았는데 원래 이런건가요? 영한님께서 강의 도중 다대다 관계는 1대다, 다대1 관계로 풀어서 진행하라고 하셨던 기억이 납니다. 그렇게 하는 이유에 대해서는 이해를 하였습니다. 저는 기존의 관계형 데이터 베이스에서는 기존의 다대다 관계를 이루고 있던 테이블들의 pk를 가져와서 새로운 테이블에 FK로 넣었고 이러한 두개의 FK를 묶어서 하나의 PK로 만들었습니다. 그러나 강의에서는 기존의 테이블들을 이어주는 테이블에 FK로 넣어주기는 하였으나 아예 새로운 PK를 만들어서 강의를 진행하시던 기억이 납니다. 여기서 제가 궁금한 점은 기존에 제가 했던 방식대로 하려면 @Embedable으로 복합키를 만들어서 진행을 해야할까요? 아니면 기존 하던 방식 말고 새로운 PK를 만들어서 진행하는 방식이 훨씬 깔끔할까요? 제가 진행하는 토이프로젝트의 환경은 aws ec2를 사용하고 있으면 DB는 mariadb를 사용하고 있습니다. 자바 버전은 17입니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
이상민 댓글 1 좋아요 0 조회수 732

spring-boot 2.7 이상을 사용 하시는 분의 경우

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

안녕하세요. 강사님께서는 2.6 버전을 사용 권장 하셨지만 왠지 모를 궁금함에 2.7에서 사용하는 spring security 5.7 이상에서 바뀐 부분으로 한번 적용을 해보고 싶었습니다. 인프런에 올라온 많은 분들의 질문을 정리 하여 만들어 보았습니다. package com.example.userservice.security; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import com.example.userservice.service.UserService; import lombok.RequiredArgsConstructor; @Configuration @EnableWebSecurity @RequiredArgsConstructor public class WebSecurity { private final UserService userService; private final BCryptPasswordEncoder bCryptPasswordEncoder; private final Environment env; AuthenticationManager authenticationManager; // spring.boot 2.7 부터는 WebSecurityConfigurerAdapter가 아닌 // SecurityFilterChain 을 사용 합니다. @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { AuthenticationManagerBuilder authenticationManagerBuilder = http.getSharedObject(AuthenticationManagerBuilder.class); authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder); authenticationManager = authenticationManagerBuilder.build(); //AuthenticationFilter authenticationFilter = new AuthenticationFilter(); //authenticationFilter.setAuthenticationManager(authenticationManager); AuthenticationFilter authenticationFilter = new AuthenticationFilter(authenticationManager , userService , env); http.csrf().disable(); http.authorizeRequests() //.antMatchers("/error/**").permitAll() // public abstract java.lang.String javax.servlet.ServletRequest.getRemoteAddr() is not supported 보기 싫을때 활성화 .antMatchers("/**") .hasIpAddress("127.0.0.1") .and() .authenticationManager(authenticationManager) .addFilter(authenticationFilter) ; http.headers().frameOptions().disable(); return http.build(); } //ex) 기존의 경우 AuthenticationManagerBuilder 를 오버라이드 하여 사용 하였지만 filterChain 안에서 호출 하여 설정 합니다. /* protected void configure(AuthenticationManagerBuilder auth) throws Exception{ auth.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder); } */ //ex)filter를 authenticationAmanger에 주입 하던 getAuthenticationFilter역시 filterChain 내부에서 사용 합니다. /* private AuthenticationFilter getAuthenticationFilter() throws Exception { AuthenticationFilter authenticationFilter = new AuthenticationFilter(); authenticationFilter.setAuthenticationManager(authenticationManager); return authenticationFilter; } */ }

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
최재영 댓글 0 좋아요 1 조회수 2543

junit5에서는 @Test 에노테이션에서 expected를 지원하지 않는 것 같습니다.

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

Assertions.assertThrows(IllegalStateException.class, () -> { memberService.join(m2); // Exception 터져야 돼. }); 혹시 junit5 쓰시는 분들은 위와 같이 수정하여서 돌려도 괜찮은 것 같습니다.

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

강사님 따로 멘토링은 안하시는지요?

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

인프런에도 멘토링 서비스가 있는데, 멘토링은 따로 안하시나요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
흰머리오목눈이 댓글 1 좋아요 1 조회수 484

하이버네이트 완벽 가이드 책 질문입니다.

자바 ORM 표준 JPA 프로그래밍 - 기본편

영한님 강의, 책들을 보면서 더 깊게 공부해보고 싶다는 열정, 관심이 불타오르게 되었습니다! 갑자기 개빈 킹이 쓴 책인 "하이버네이트 완벽 가이드에는 무슨 내용이 있을까?"라는 생각과 함께 도전해보려고 고민하고 있는데 강사님의 의견이 궁금합니다 ㅎㅎ (자바 ORM 표준 JPA 프로그래밍 책의 저자이시고 자료가 없었던 시절에 밑바닥부터 공부하셨던 분이셔서 의견이 궁금합니다.) 2010년에 나온 책이라서 현재와 맞지 않는 내용도 있겠지만, 하이버네이트 개발자가 쓴 책이면 JPA, 하이버네이트를 깊게 이해할 수 있지 않을까?라는 호기심이 생겼습니다. 더 나아가서 로드 존슨이 쓴 책들 중에서 유일한 번역본인 "expert one-on-one J2EE 설계와 개발"도 파헤치고 싶네요.

  • java
  • jpa
  • book
haha ha 댓글 1 좋아요 0 조회수 731

User 테이블 바로 생성 안 되시는 분들 테이블명 바꿔서 하시면 됩니당.

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

H2 데이터베이스 2버전부터 User가 예약어가 된 것 같습니다. User로 바로 테이블 생성이 안 되시는 분들은 클래스 이름을 User가 아닌 다른 것으로 하시거나 @Table(name = "Users") 이런 식으로 테이블명을 바꾸시면 잘 됩니다.

  • jpa
  • h2
비가싫어요 댓글 0 좋아요 1 조회수 720

백엔드 개발자의 방향성에 대해 조언을 얻고자 합니다

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

현재 국비 학원을 수료하며 프로젝트를 마친 뒤에 김영한님 강의를 듣고 있으며 spring에 대해 이제서야 이해하려 하는 취준생입니다. 문득 제가 어떤 개발을 하고 싶은지 방향성에 대해 생각해보게 되었습니다. ->어떤 개발을 하고 싶은지 방향성에 대해 되짚어 보고 있었다 ->SQL문을 짜면서 효율적인 방법은 무엇이 있을까 고민하는 과정이 스스로 가치 있는 고민을 하고 있다는 생각이 들었다. ->데이터 처리 속도 개선에 관하여 고민하는 개발자가 되고 싶다. ->대용량 트래픽을 다루는 서비스 회사에서 성장하고 싶다. 질문 ==> 위의 4문장을 설득력 있게 말하기 위해서 취준에 뛰어드는 예비 백엔드 개발자 수준에서 할 수 있는 "공부 방향"은 무엇이 있을지 조언 해주실 수 있을까요? (특정 개념이나 강의를 추천해주셔도 감사할 것 같습니다. )

  • springboot
  • java
  • spring
  • 백엔드
  • 신입
sky66951 댓글 1 좋아요 3 조회수 5676

Spring Security 관련된 내용도 다뤄 주셨으면 해요~!

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

기술 면접이나 면접 과제 중 인증, 인가 또는 사용자 정보 암호화(jwt) 관련된 과제들도 많이 출제가 되더라구요 프로젝트 진행하면서 회원가입, 로그인 구현 시 코드를 끌어다 사용해 구현은 했었지만 사실 너무 복잡하고 어려워서 사실 그 부분에 대한 질문이 들어오면 입도 못 뗄 것 같아요... 보안 관련 시리즈도 기대 해봅니다!! 영한 튜터님 강의 보면서 정말 즐겁게 공부하고 있어요:)

  • 김영한
  • 강의
  • spring
  • jpa
Wonhyuk Shin 댓글 1 좋아요 0 조회수 512

QueryDsl SpringBoot 2.7의 gradle 설정을 공유합니다.

실전! Querydsl

plugins { id 'org.springframework.boot' version '2.7.4' id 'io.spring.dependency-management' version '1.0.14.RELEASE' id 'java' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' // queryDSL 설정 implementation "com.querydsl:querydsl-jpa" implementation "com.querydsl:querydsl-core" implementation "com.querydsl:querydsl-collections" annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor 사용 지정 annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드 annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드 } tasks.named('test') { useJUnitPlatform() } // Querydsl 설정부 def generated = 'src/main/generated' // querydsl QClass 파일 생성 위치를 지정 tasks.withType(JavaCompile) { options.getGeneratedSourceOutputDirectory().set(file(generated)) } // java source set 에 querydsl QClass 위치 추가 sourceSets { main.java.srcDirs += [ generated ] } // gradle clean 시에 QClass 디렉토리 삭제 clean { delete file(generated) } 해당 소스는 타사 강의 보다가 본 설정에서 가져왔습니다. 기존 영한님 강의와 다른 점이 3가지 있으니 주의하시기 바랍니다. Querydsl Q파일 생성 위치가 다릅니다. 기존 영한님 강의대로 $build 로 시작하는 설정을 사용하면 테스트 실행 시 Q파일의 위치를 찾지 못해서 테스트가 실패합니다. Gradle -> Tasks -> build -> clean Gradle -> Tasks -> build -> build 혹은 classes 기존 영한님 교안에는 빌드 시 Gradle -> Tasks -> other -> compileQuerydsl 로 Q파일을 생성하지만, 이 방법의 경우 other에 해당 메뉴가 없습니다. 그래서 빌드 시에는 그냥 build 메뉴의 build 혹은 classes 로 빌드하시면 Q파일이 생깁니다. 영한님 강의에서는 gradle build 폴더가 대부분 git 버전관리에 포함되지 않으므로 따로 설정할 필요가 없지만, 이 경우 Q파일이 소스폴더에 들어가므로 .gitignore 에 아래와 같이 별도로 경로를 설정해 주어야 합니다. ### Querydsl /src/main/generated 혹시 저같이 청개구리마냥 강의에 나온 버전 사용 안 하고 최신 버전 사용하시는 분들께 도움이 되었으면 좋겠습니다. 저도 타사 강의에서 가져온 것이고 기초 테스트만 통과한 것이라서 혹시 강의에 맞지 않는 경우 영한님이나 다른 분들이 추가 정보를 주시면 좋을 것 같습니다. 여담인데 QueryDSL은 쿼리 짜긴 확실히 편한데 설정이 버전마다 중구난방이라 불편합니다. 똑똑한 개발자분들이 이런 설정도 그냥 @Configuration 으로 빼버리는 거 만들어주지 않을까 하는 기대가 있긴 합니다.

  • java
  • spring
  • jpa
  • querydsl
박민호 댓글 5 좋아요 20 조회수 11524

인기 태그

인프런 TOP Writers

주간 인기글