이야기를 나눠요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
권장 수강기간
삭제된 글입니다
-
스프링 핵심 원리 - 기본편
계속 진행해야하나 고민입니다...
스프링 입문 처음으로 한번 다 듣고 스프링 기본편 듣는 중인데 내가 이걸 왜 따라서 만들고 코딩하고 있는지 모르겠고 그냥 영상보면서 계속 따라서 코딩중입니다... 제가 아직 처음이라 그런건지 힘들고 어렵네요 ㅠㅠ
-
스프링 핵심 원리 - 기본편
spring 처음 접근하는 대학생
안녕하세요 현재 3학년에 재학중인 대학생입니다이번 여름방학때 백엔드 자바-스프링으로 진로를 정하고강의를 듣기 시작했습니다. 하지만 김영한님 강의가 1타 강의라고 알고 있는데 전체적인 이론인 의존관계나 컴포넌트, 빈 같은것은 이해가 되지만코드 하나하나가 이해가 가질않습니다. gpt도 이용해서 코드를 분석하고 있는데요시간이 가면 갈수록 강의에서 작성하는 코드가 길어져 분석이 불가능 해지고 있습니다초반엔 이론만을 위주로 이해해도 코드가 어느정도 머리속에 들어왔는데 나중가서 코드를 이해못하니 이론도 이해가 어려워지더군요 ㅠㅠ학교에서는 자바 기본 문법밖에 안배우고 백준을 자바로 풀고 프로젝트도 안해봤는데 지금 제가 이 강의를 듣기에는 너무 이를까요?아니면 제가 이 강의의 코드를 이해하고 코드 작성을 따라가기 위해 도움될만한 방법이 있을지 궁금합니다
-
스프링 핵심 원리 - 기본편
영상 마지막에 Test 파일 오류
사실 질문이 아니라 정보를 공유해 드리고 싶어서 글 올립니다마지막 영상에서 test 파일을 한번에 실행시킬때 저처럼 오류가 나는 분들이 있을텐데 이는 jdk21 버전을 사용하였을때 나는 오류입니다 gpt를 통해 답을 얻어내고 해결했으니 참고바랍니다 ㅎㅎMockito와 Byte Buddy 개요Mockito: Java 애플리케이션 테스트에서 객체의 모킹을 위해 널리 사용되는 라이브러리입니다. 모킹은 실제 객체 대신 가짜 객체(Mock)를 사용하여 테스트를 수행하는 기법입니다.Byte Buddy: 바이트코드 조작을 통해 동적으로 클래스와 메서드를 생성 및 수정하는 라이브러리로, Mockito는 이 라이브러리를 사용하여 모킹 기능을 구현합니다.문제 원인 및 해결 방법문제 원인Java 21 버전에서는 이전 버전들과 달리 일부 내부 API가 변경되었을 수 있습니다. 이는 특정 라이브러리가 동적으로 클래스 로딩을 하거나 바이트코드를 조작하는 방식에 영향을 줄 수 있습니다.동적 에이전트 로딩 문제: 새로운 Java 버전에서는 동적 에이전트 로딩이 제대로 지원되지 않거나 제한될 수 있습니다. 이는 Byte Buddy가 사용하는 기법 중 하나로, 클래스 로딩을 동적으로 변경하는 데 사용됩니다.해결 방법최신 버전 사용: Mockito와 Byte Buddy의 최신 버전은 새로운 Java 버전에서 발생할 수 있는 문제를 해결하기 위해 업데이트됩니다. 최신 버전에서는 최신 Java의 변경 사항을 반영하여 호환성을 보장합니다.최신 버전은 버그 수정, 성능 개선, 그리고 새로운 기능을 포함하여 더 안정적으로 동작합니다.특히 Byte Buddy는 Java의 내부 구조 변화에 대응하기 위해 자주 업데이트됩니다.구체적인 해결 과정의존성 업데이트: build.gradle 파일에서 Mockito와 Byte Buddy의 최신 버전으로 의존성을 업데이트했습니다.groovy코드 복사dependencies { testImplementation 'org.mockito:mockito-core:4.0.0' testImplementation 'net.bytebuddy:byte-buddy:1.12.6' testImplementation 'net.bytebuddy:byte-buddy-agent:1.12.6' }최신 버전의 장점:버그 수정: 최신 버전에서는 이전 버전에서 발생한 다양한 버그들이 수정되었습니다.호환성: 최신 버전은 Java 21과 같은 최신 Java 버전과의 호환성을 보장합니다.성능 개선: 최신 버전에서는 성능이 개선되어 더 빠르고 안정적인 테스트를 수행할 수 있습니다.결과: 최신 버전을 사용함으로써, Java 21에서 발생하던 동적 에이전트 로딩 문제와 관련된 오류가 해결되었습니다. 이는 최신 버전이 Java 21의 변경 사항에 맞게 적절히 대응했기 때문입니다.결론적으로, 라이브러리의 최신 버전을 사용함으로써 새로운 Java 버전과의 호환성 문제를 해결할 수 있었던 것입니다. 최신 버전의 라이브러리는 일반적으로 더 나은 안정성과 성능을 제공하며, 최신 환경에서의 호환성을 보장합니다./*1. Mockito 및 Byte Buddy 최신 버전 사용 사용 중인 Mockito 및 Byte Buddy 라이브러리의 버전을 확인하고, 최신 버전으로 업데이트합니다. 최신 버전은 최신 JDK와의 호환성을 더 잘 지원할 수 있습니다. build.gradle 파일에서 의존성을 최신 버전으로 업데이트하세요:*/ dependencies { testImplementation 'org.mockito:mockito-core:4.0.0' testImplementation 'net.bytebuddy:byte-buddy:1.12.6' testImplementation 'net.bytebuddy:byte-buddy-agent:1.12.6' }
-
스프링 핵심 원리 - 기본편
어떻게 공부 해야 할까요.
4줄 요약저는 프로그래밍 초보자로, 회사에서 스프링과 Vuejs를 공부하라는 지시를 받았습니다.하지만 자바의 기본 지식이 부족해 강의를 따라가기 어렵습니다.현재 학업, 스프링, Vuejs, 빅데이터 대회준비를 동시에 진행하고 있어 시간도 부족합니다.자바로 돌아가서 기초를 쌓아야 할지, 스프링 진도를 계속 나가야 할지 고민입니다.주서.저는 눈 가리고 귀 막은 상태로 강의를 듣고 싶지 않습니다,저는 오래 산업에 종사하신 분들의 현실적인 조언이 필요합니다.안녕하십니까.곧 인턴으로 투입되기 위해 강의를 듣고 있는 얼리어잡터입니다. 제 배경은 이렇습니다. 객체지향프로그래밍 경험은 이 스프링 강의 속 코드를 보며 따라친 게 처음입니다. 회사에선 자바의 기본적인 문법만 공부하고 바로 스프링으로 들어가라고 하였습니다. 저는 학교에서(대학교가 아님) 수업들은 C와 Python의 경험을 토대로 자바의 겉 부분을 공부하고 스프링으로 넘어오게 되었습니다. 헌데 제가 자바의 겉 부분을 제가 잘 못 핥았는지 지금까지 들은 강의 내용을 전부 이해한다는 생각이 전혀 안들어 인턴인데 첫 회사 업무를 잘 수행 할 수 있을지가 의심이 들었습니다. 지금 제일 조언이 필요한 부분은 학업, 스프링, Vuejs, 빅데이터 대회 전부를 동시에 진행하고 있는데요현재 자바도 잘 모르는데 final 이든 데이터 구조든 처음 보는 골뱅이 @Test 이런 것이 자바에서 어떻게 동작하는지 잘 몰라도 시간이 2개월 정도 밖에 남지 않았으니 그냥 스프링 진도를 나가는 것이 맞는지아니면 스프링은 일단 접어두고 제대로 기초 공사 자바부터 차근차근 철근을 하나씩 박으면서역량을 쌓기 위해 자바로 돌아가야 할지, 현업에 오래 종사하신 분들의 조언이 필요합니다
-
스프링 DB 2편 - 데이터 접근 활용 기술
스프링 완전정복 로드맵을 수강중 JPA책공부
안녕하세요. 김영한 강사님의 Spring 완전 정복 로드맵을 수강중인 학생입니다. 지금 DB 2편까지 수강을 마쳤는데 여기서 다음으로 바로넘어갈지 아니면 JPA책을 읽어볼지 고민중인데요. 이미책은 구입해놔서 실행에만 옮기면되서 조언구하고싶습니다. 시간은 굉장히여유로워서 순서가중요할것 같습니다!
-
실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
변경사항 이력이 관리되면 더 좋을 거 같아요
저는 특정강의부터 따라하면서 보고 싶은데 완료프로젝트에 git으로 각 강의마다의 결과가 반영되었으면 더 좋았겠다는 생각이 들었어요 ! 좋은 강의 감사드립니다.
-
스프링 핵심 원리 - 기본편
강의 내용 참고해서 교육 동영상을 만들어도 괜찮을까요?
안녕하세요 저는 강사님 커리큘럼을 따르고 있는 학부생입니다.학교 전공수업에 오픈소스 교육자료를 만드는 과제가 있습니다소프트웨어 툴, 개발 도구 등에 대한 동영상 강의를 제공하는 비영리의 관련 학교 채널 유트브에 올라갈것이며 동영상에는 (CC BY-NC 4.0) 라이센스가 적용되어 올라갈것 같습니다이 동영상에서 스프링의 기초적인 내용을 설명하기 위해 제가 배웠던 강사님의 강의내용을 바탕으로 30~40분 분량의 관련 교육 영상을 만들고 싶습니다. 물론 강의내용을 그대로 사용하지않고 부분부분 배운내용을 기반으로 요약하는 식으로 영상을 만들 생각입니다김영한 강사님 강의의 ppt 자료는 사용하지않고 따로 제가 만들어서 사용할 것 이지만 강의에서 사용된 예제 코드(member service예제) 및 배운내용을 사용해도 저작권에 문제가 없을지 출처를 남겨야한다면 동영상에 어떤식으로 출처를 남기면 좋을지 문의드립니다
-
스프링 부트 - 핵심 원리와 활용
강의 순서에 대한 질문입니다
삭제된 글입니다
-
자바 웹 개발 지망 mac, window 고민
삭제된 글입니다
-
스프링 핵심 원리 - 기본편
이해는 가는데 막상 혼자 코드를 작성해보려니까 생각이 안나네요
삭제된 글입니다
-
스프링 핵심 원리 - 기본편
MVC 1편 다음에 들을 강의가 고민입니다.
삭제된 글입니다
-
스프링 핵심 원리 - 기본편
강의 멈췄다가 재생할때
삭제된 글입니다
-
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
PathPattern에 대한 몇가지 예시입니다.
설명PathPattern 공식 문서?: 한 문자 일치/pages/t?st.htmlYES: /pages/test.html, /pages/tXst.htmlNO : /pages/toast.html*: 경로(/) 안의 모든 문자 일치/resources/*.pngYES: /resources/photo.pngNO : /resources/favority.ico**: 하위 경로 모든 문자 일치/resources/**/resources/image.png, /resources/css/spring.css{spring}: spring 이라는 변수로 캡처/resources/{path}/resources/robot.txt -> path변수에 "robot.txt" 할당@PathVariable("path")로 접근 가능{*spring}: 하위 경로 끝까지 spring변수에 캡쳐/items/{*path}/items/1/add -> path변수에 "/1/add" 할당{spring:[a-z]+}: 정규식 이용/items/{path:[a-z]+}YES: /items/robotsNO : /items/123 예제 1 - {*spring}@GetMapping("/hello/{*name}") @ResponseBody public String handleTest( @PathVariable String name ) { log.info("name = {}", name); return name; }GET http://localhost:8080/hello/path-test -> name = /path-test === GET http://localhost:8080/hello/path-test/other -> name = /path-test/other 예제 2 - 정규식@GetMapping("/static/{name:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{ext:\\.[a-z]+}") @ResponseBody public String handle( @PathVariable String name, @PathVariable String version, @PathVariable String ext ) { log.info("name = {}", name); log.info("version = {}", version); log.info("ext = {}", ext); return "/" + name + "/" + version + "/" + ext; }GET http://localhost:8080/pathtest-1.0.0.jar -> name = pathtest version = 1.0.0 ext = .jar 잘못된 사용@GetMapping("/static/{*fullpath}{name}") @ResponseBody public String runtimeError( @PathVariable String fullpath, @PathVariable String name ) { log.info("fullpath = {}", fullpath); log.info("name = {}", name); return name; } Description: Invalid mapping pattern detected: /static/{*fullpath}{name} ^ No more pattern data allowed after {*...} or ** pattern element{*...} 또는 ** 패턴 요소 다음에는 다른 패턴 데이터를 사용할 수 없습니다.
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
백엔드 개발자의 방향성에 대해 조언을 얻고자 합니다
현재 국비 학원을 수료하며 프로젝트를 마친 뒤에 김영한님 강의를 듣고 있으며spring에 대해 이제서야 이해하려 하는 취준생입니다.문득 제가 어떤 개발을 하고 싶은지 방향성에 대해 생각해보게 되었습니다. ->어떤 개발을 하고 싶은지 방향성에 대해 되짚어 보고 있었다->SQL문을 짜면서 효율적인 방법은 무엇이 있을까 고민하는 과정이 스스로 가치 있는 고민을 하고 있다는 생각이 들었다.->데이터 처리 속도 개선에 관하여 고민하는 개발자가 되고 싶다.->대용량 트래픽을 다루는 서비스 회사에서 성장하고 싶다. 질문 ==> 위의 4문장을 설득력 있게 말하기 위해서 취준에 뛰어드는 예비 백엔드 개발자 수준에서 할 수 있는 "공부 방향"은 무엇이 있을지 조언 해주실 수 있을까요? (특정 개념이나 강의를 추천해주셔도 감사할 것 같습니다. )
-
swagger 질문입니다 ㅠㅠㅠ
안녕하세요 프로젝트 swagger에 대한 질문입니다 ㅠㅠ아시는분있으면 꼭 답해주시기 바랍니다코드 게시물 관련 프로젝트입니다.나의 페이지에서 코드 게시물을 검색할수 있는 필터링 조건과다른 유저 페이지에서 코드 게시물을 검색할수 있는 필터링 조건이 다른 상황입니다.api 설계시 위 두 api를 모두 "/codebox/{nickname}"으로 동일한 상황이고@RequestBody로 받는 JSON 데이터들은 다르기 때문에 Controller에서@GetMapping("/codebox/{nickname}")으로 동일하나 나의 페이지 접속시 토큰을 추가로 hearder에 받게 하여 아래와 같이 분리하여 구현된 상황입니다.여기서 Swagger를 통해 api명세서를 자동으로 생성하게 되면 같은 리소스(같은 uri)에 대해서는 api가 한개 생성됩니다. 저는 아래 두가지 경우를 모두 api 명세서로 보여지게 생성하고 싶은데 여러가지 방법을 찾아보는데 마땅히 나오지 않아 질문드립니다.ㅠㅠ아시는 분 있으시면 꼭 좀 댓글달아주시기 바랍니다.ㅠㅠ@GetMapping(value = "/{nickname}", headers = JwtProperties.ACCESS_HEADER_STRING) @UserAuthen @UserAuthor @ApiOperation(...) @ApiResponses({ ... }) @ApiImplicitParams({ @ApiImplicitParam(name = "nickname", value = "회원 닉네임", required = true), @ApiImplicitParam(name = JwtProperties.ACCESS_HEADER_STRING, value = "엑세스 토큰", required = true) }) public DataResponse<PostListResponse> userPage2(@PathVariable("nickname")String nickname, @RequestHeader(JwtProperties.ACCESS_HEADER_STRING) String accessToken, @RequestBody SearchFormAboutOtherUserPost form) { ..... } @GetMapping(value = "/{nickname}", headers = {JwtProperties.ACCESS_HEADER_STRING, JwtProperties.MYSESSION_HEADER_STRING}) @UserAuthen @UserAuthor @ApiOperation(...) @ApiResponses({ ... }) @ApiImplicitParams({ @ApiImplicitParam(name = "nickname", value = "회원 닉네임", required = true), @ApiImplicitParam(name = JwtProperties.ACCESS_HEADER_STRING, value = "엑세스 토큰", required = true), @ApiImplicitParam(name = JwtProperties.MYSESSION_HEADER_STRING, value = "마이페이지 엑세스 토큰", required = true) }) public DataResponse<PostListResponse> userPage3(@PathVariable("nickname")String nickname, @RequestHeader(JwtProperties.ACCESS_HEADER_STRING) String accessToken, @RequestHeader(JwtProperties.MYSESSION_HEADER_STRING) String my_sessionToken, @RequestBody SearchFormAboutSelfUserPost form) { .... }
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Spring Security 관련된 내용도 다뤄 주셨으면 해요~!
기술 면접이나 면접 과제 중 인증, 인가 또는 사용자 정보 암호화(jwt) 관련된 과제들도 많이 출제가 되더라구요프로젝트 진행하면서 회원가입, 로그인 구현 시 코드를 끌어다 사용해 구현은 했었지만 사실 너무 복잡하고 어려워서 사실 그 부분에 대한 질문이 들어오면 입도 못 뗄 것 같아요...보안 관련 시리즈도 기대 해봅니다!!영한 튜터님 강의 보면서 정말 즐겁게 공부하고 있어요:)
-
실전! Querydsl
QueryDsl SpringBoot 2.7의 gradle 설정을 공유합니다.
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 -> cleanGradle -> 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 으로 빼버리는 거 만들어주지 않을까 하는 기대가 있긴 합니다.
-
스프링 핵심 원리 - 기본편
진짜 강의 구매하길 잘했다는 생각이 너무 듭니다 🥹
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아직 강의를 완강한 것도 아니고 로드맵을 전부 구매하지는 않았지만 지금까지의 설명을 들었을 때 사람들이 그렇게 호평한 이유를 알 것 같습니다! 주워들었던 용어들에 불과했던 IoC, DI, SOLID 원칙 등등.. 특히 역할과 구현 분리 부분에서 자동차와 연극 비유는 레전드였습니다 👏👏사실 저는 그동안 node.js 기반으로만 개발 공부를 하고 있었어서 처음에 스프링 무료 버전을 들었을 때 까지만 하더라도 유료 강의들로 넘어간다고 해서 내가 이해할 수 있을까..? 라는 불안감이 있었는데, 지금처럼 계속 공부한다면 충분히 스프링도 익숙해질 것이라 생각하게 되었습니다! 영한 님이 이 글을 보실지는 모르겠지만.. 진짜 감사드립니다 👍👍👍 모르는 게 생기면 바로 바로 여쭤보겠습니다!
-
서울시뉴딜일자리_IT인턴 3개월 [급여월260만]지원사업안내_빅데이터 기반 서비스플랫폼 과정 [스터디,프로젝트,프론트엔드,백엔드,자바,코딩]
서울시에서 뉴딜일자리사업 일환으로 2차 서비스플랫폼개발자 양성과정으로 3개월 인턴십 (급여 월 260) 보내주는 프로그램 진행중인데 신청해보세요! 자세한 내용은 https://blog.naver.com/kjc_sh/222775806456 참고해주세요
주간 인기글
순위 정보를
불러오고 있어요