이야기를 나눠요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2연결이 안됩니다.
안녕하세요. 강의대로 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과 연동이 안되는지 아무리 찾아도 없습니다 ㅠㅠ
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 부트 입문 강의 다 듣으면 다음 강의는 어떤 강의 부터 시작해야되나요?
스프링 부트 입문 강의 다 듣으면 다음 강의는 어떤 강의 부터 시작해야되나요?
-
스프링 부트 - 핵심 원리와 활용
오탈자 수정 문의
안녕하세요 영한님.항상 좋은 내용을 알려주셔서 재밌게 공부하고 있습니다.영한님께서 함께 배포해주신 강의 자료에서 아래와 같은 부분이 수정이 필요한 것 같아 문의 드립니다.한 번 확인 부탁드립니다.섹션 7. 외부설정과 프로필2외부설정 사용 - @ConfigurationProperties 생성자 중 참고 @ConstructorBinding스프링 3.0 -> 스프링 부트 3.0섹션 9. 마이크로미터, 프로메테우스, 그라파나프로메테우스 - 게이지와 카운터 중 rate()increase(data[1m]) -> rate(data[1m])increase(data[2m]) -> rate(data[2m])그라파나 - 메트릭을 통한 문제 확인 설명 중실무에서 주로 많이 발생하는 다음 5가지 대표적인 예시를 확인해보자. -> 실무에서 주로 많이 발생하는 다음 4가지 대표적인 예시를 확인해보자.
-
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
왜 강의가 벌써 끝나있죠..??
살면서 이렇게 즐겁게 강의 들어본 적이 없는 것 같네요...들으면서 남겼던 질문 3개도 너무 감동적으로 답변해주시고,,62 강의 12시간 1분 동안의 시간동안 태현님과 진행한 공부가 정말 행복했습니다이렇게나 훌륭한 강의 만들어주셔서 감사드리고 항상 행복만 가득하시길 바라겠습니다.공부하는 개발자 최태현님감사합니다!
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 동영상 앞으로가기
동영상 10 초 앞으로 가기 나 뒤로 가기 안되나요? 강의 중간에 놓치면 처음부터 다시 듣고 있어서요
-
실전! 스프링 데이터 JPA
맥북 사양
곧 맥북 구매 예정인데 영한님께서 사용하시는 사양이 궁금합니다. (특히 ram)혹시 알 수 있을까요?
-
스프링부트 개념정리(이론)
강의 감사합니다 쏙쏙 들어오는 느낌
2탄도 있을까요?
-
실전! 스프링 부트와 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입니다.
-
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
spring-boot 2.7 이상을 사용 하시는 분의 경우
안녕하세요. 강사님께서는 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; } */ }
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
junit5에서는 @Test 에노테이션에서 expected를 지원하지 않는 것 같습니다.
Assertions.assertThrows(IllegalStateException.class, () -> { memberService.join(m2); // Exception 터져야 돼. }); 혹시 junit5 쓰시는 분들은 위와 같이 수정하여서 돌려도 괜찮은 것 같습니다.
-
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
H2를 최신버전(현재는 2.1.214)으로 사용 시 오류 임시 해결 방법
안녕하세요.다름 아니라 Spring Boot가 3.XX 버전으로 업데이트가 되면서, 해당 버전을 사용하시는 분들은 1.3.176버전으로 H2 이용 시 404에러가 발생합니다.해당 에러를 해결하려면 최신 버전으로 H2를 사용하여야 하는데요. 최신 버전으로 H2를 사용하면 1.3.176 이하 버전처럼 db가 자동 생성 되지 않습니다. 그래서 해결 방법을 찾았는데요. 이 방법은 제가 어떻게 어떻게 하다 보니 발견한 방법이라서 옳다고 할 수는 없겠지만, H2를 테스트용으로만 사용하기 때문에 띄우기만 하면 되므로 문제 없을 것 같아 공유드립니다. 우선 pom.xml에서 h2 dependency를 추가하였다면, 아래 이미지처럼 왼쪽 프로젝트 창의 External Libraries 리스트에서 h2를 찾을 수 있습니다.해당 h2 jar파일을 우클릭하면 탭이 뜨는데 Open Library Settings(F4)를 선택하면 h2 jar 파일의 위치를 확인할 수 있습니다.그럼 해당 위치로 가셔서 jar파일을 더블 클릭하여 실행시키면 브라우저에서 H2 콘솔이 실행됩니다.(h2 jar 파일 우클릭 시 탭에서 Open in > Directory Path(Ctrl + Alt + F12)를 선택하면 Show Explorer탭이 뜨고, jar 파일 선택하면 폴더로 바로 이동 됩니다)이 때 우측 하단의 트레이를 확인해보시면 H2 Database Engine이 실행된 것도 확인할 수 있습니다. 이제 브라우저의 H2 콘솔에서 Generic H2 (Embedded) 를 선택하시고 강의 내용대로 아래 이미지처럼 작성해주세요.연결 시험(Test Connection)을 눌러보면 아래 이미지처럼 db가 없다고 나올 것입니다. 그렇지만 걱정 마시고 이 상태에서 연결을 눌러보세요.db가 생성된 화면을 만날 수 있습니다.이제 db가 생성이 된 것입니다.그렇기 때문에 뒤로 가기를 눌러 다시 로그인 화면이 뜬 후에 연결 시험(Test Connection)을 눌러보면 아까와는 다르게 Test Successful이라는 성공 메세지를 만날 수 있습니다.(그러나 이것은 브라우저의 H2 콘솔 URL의 포트를 보시면 아시겠지만, 저희 프로젝트에서 db가 만들어진 것이 아닙니다. 이에 대해서는 아래를 읽어주세요) 제가 H2 경험이 별로 없어서 해당 방식이 Embedded, In memory, Server 모드 3가지 중 어떤 방식인지 잘 모르지만 서버 방식으로 추측됩니다.서버 방식은 H2를 따로 외부에서 띄워 놓고 접근해서 사용하는 것을 말하는 것 같은데요. 그렇기 때문에 저희가 만들어 놓은 프로젝트 URL인 localhost:{랜덤포트}/h2-console 에서 H2 사용 시 Embedded로 선택하여 Embedded 모드로 실행하면 연결 오류가 그대로 발생합니다. 그래서 강의와는 다르게 아래 이미지처럼 Server를 선택하여 외부(여기서는 프로젝트 외부에서 H2를 따로 동작시켜 db를 만들어준 것을 말함)의 H2에 접근하도록 연결해야 합니다.연결 방법은 아래와 같이 URL을 적어주면 됩니다. Saved Settings와 JDBC URL 입력 항목을 유의해주세요.이렇게 설정해준 후, Test Connection 버튼을 눌러보면 연결 테스트가 성공한 것을 확인할 수 있습니다.마찬가지로 연결 버튼을 클릭해보면 연결도 잘 됩니다. 이제 이 상태에서 강의를 이어서 진행하면 문제 없을 것입니다. ※ 추가적으로, 외부에서 서버를 켜놓고 접속하는 것이기 때문에 오른쪽 트레이의 H2 Database Engine을 우클릭하여 종료하면 프로젝트의 H2 콘솔에서 연결이 불가합니다. 그러니 프로젝트 작업 시에는 트레이를 종료하지 않도록 유의해주세요.※ 그리고, H2 Engine을 따로 받아서 서버 모드로 사용하면 DB 상태가 유지되지만, 이 방법은 프로젝트의 h2 jar 파일을 통해 진행하다보니 DB 상태가 유지되는지 알 수 없습니다. 오른쪽 트레이에서 H2를 재실행시키면 다시 DB를 만들어야 하는 것 같더라고요. 참고 부탁드려요~ [추가]Users Microservice - JPA①, ② 강의에서 H2 DB에 연결해 DB를 연결해주는데요.위의 과정은 Embedded가 아닌 Server 로 처리하기 때문에 설정이 다릅니다.application.yml 파일에서 아래와 같이 설정해주세요.유의하실 부분은 spring.datasource.url 부분과 spring.jpa.generate-ddl 부분입니다.url 만으로는 처리가 안되길래 jpa에서 db 생성하도록 generate-ddl을 true로 설정하였습니다.spring: application: name: user-service h2: console: enabled: true settings: web-allow-others: true path: /h2-console datasource: driver-class-name: org.h2.Driver url: jdbc:h2:tcp://localhost/mem:testdb username: sa jpa: generate-ddl: true
-
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
강사님 따로 멘토링은 안하시는지요?
인프런에도 멘토링 서비스가 있는데, 멘토링은 따로 안하시나요?
-
스프링 배치
git주소 소스요청
git 주소를 가보니 강의해 주신 모든 소스가 있지 않던대요 강의해 주신 모든 소스를 받을 수 있나요?
-
토비의 스프링 부트 - 이해와 원리
강의자료에 있는 디스코드 초대장 문제입니다.
강의 자료에 있는 디스코드 주소와 연결되어있는 하이퍼링크가 다릅니다. 따라서 클릭 시 올바르지 않은 초대장으로 연결됩니다.수정해주시면 감사하겠습니다. :)
-
토비의 스프링 부트 - 이해와 원리
부트 3.0 사용하시는 분들은 @RequestMapping 만으로 매핑이 등록되지 않으니 참고하세요.
삭제된 글입니다
-
스프링 부트 웹 개발 입문 - 따라하며 배우기
스프링 이해가 안되어서 듣고 있는데 ..
정말 너무 좋습니다 ㅠㅠ그동안 이해가 안되었던 부분들을너무 쉽게 설명해주셔서 잘 따라가고 있어요!동네 개발자 형이 옆에서 알려주는듯한 느낌.. ㅋㅋ좋은 강의 감사드립니다!
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
model.addAttribute("data" , "hello!!"); 헬로안뜨네요
vscode 라서그런가요 hello!! 가 안되네요 다른거 다똑같이했는데 ㄷ
-
실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD
사용하시는 검증 메서드들에 대한 질문입니다.
Assert를 스프링 Assert를 쓰기도하시고, assertj 를 이용하기도 하시던데두 종류를 섞어 쓰시지만 성격을 좀 다르게 쓰시는 것 같아서 어떤 상황에서 쓰시는 걸까요?
-
실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD
[참고] JPA 적용하기 영상에서.
application.properties 에spring.jpa.properties.hibernate.show_sql=true spring.jpa.properties.hibernate.format_sql=true넣으셔야지 강의 영상처럼 로그 나옵니다
-
토비의 스프링 부트 - 이해와 원리
강의 중 토비님이 사용하신 단축키 모음
워낙 손이 빠르시고 단축키에 익숙하셔서 인텔리제이를 좀 사용해본 분들이 아니면 이 코드가 갑자기 어디서 생겨났는지, 이 화면이 대체 어떻게 뜬건지 모를 것 같아 정리해봤습니다. 일단 기억에 남는 것 위주로 작성했는데, 더 생각나거나 아직 다 본게 아니므로 그 이후에도 보이면 더 적겠습니다.윈도우 기준 인텔리제이 단축키 입니다. 변수 뒷부분부터 작성한 후에 갑자기 변수타입이랑 변수명 알아서 생성되는거(가장 자주 보임) -> ctrl+alt+vA라는 함수 내에 있던 코드가 갑자기 B라는 새로운 함수로 빠지는거(한번 본 듯) -> ctrl+alt+m조건부 자동 구성 - '커스톰 @Conditional' 챕터에서 톰캣, 제티 등을 특정 클래스가 존재할 때 사용하도록 하기 위해 찾으실 때 -> ctrl+n 으로 검색 후 scope를 All Places로 (추가로 언더토우는 "io.undertow.Undertow" 하면 되여)클래스명이나 함수들 아직 존재하지 않는데 우선 작성하시고, 갑자기 짜잔하면서 자동생성되는거 -> alt+enter 후 Create -- 고르면 되는데, 보통 맨 위 이므로 바로 엔터치면 됨.테스트 클래스 만드는거(토비님이 사용하셨는진 정확히 모르겠음) -> ctrl+shift+t클래스명 변경하실 때(자주 안나오긴 했는데, 예를들어 MySpringBootAnnotation을 MySpringBootApplication 으로 수정하실때 -> shift+F6오버라이드 하실 때 -> ctrl+O실습 따라가다보면 안쓰는 import들이 많아짐 -> ctrl+alt+O 로 정리 가능인텔리제이 아래쪽에 터미널창 뜨는거 -> alt+F12가장 많이 쓰신거! Assertions.assertThat이 갑자기 파바박하고 나오는거 -> File-Settings-Live Templates 검색 (혹은 shift 두번 연속으로 누른 후 Live Templates 검색) 후에 우측 '+' 버튼 누르고 'Live Template' 선택 후 Abbreviation을 "asj", Template text를 "Assertions.assertThat($END$);" 로 설정. (이 경우 저는 그냥 'java' 쪽에 넣어뒀는데, 별도로 관리하고 싶으시면 +버튼 누르고 Template Group으로 그룹 추가한 후 진행)