inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이야기를 나눠요

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

spring 처음 접근하는 대학생

스프링 핵심 원리 - 기본편

안녕하세요 현재 3학년에 재학중인 대학생입니다 이번 여름방학때 백엔드 자바-스프링으로 진로를 정하고 강의를 듣기 시작했습니다. 하지만 김영한님 강의가 1타 강의라고 알고 있는데 전체적인 이론인 의존관계나 컴포넌트, 빈 같은것은 이해가 되지만 코드 하나하나가 이해가 가질않습니다. gpt도 이용해서 코드를 분석하고 있는데요 시간이 가면 갈수록 강의에서 작성하는 코드가 길어져 분석이 불가능 해지고 있습니다 초반엔 이론만을 위주로 이해해도 코드가 어느정도 머리속에 들어왔는데 나중가서 코드를 이해못하니 이론도 이해가 어려워지더군요 ㅠㅠ 학교에서는 자바 기본 문법밖에 안배우고 백준을 자바로 풀고 프로젝트도 안해봤는데 지금 제가 이 강의를 듣기에는 너무 이를까요? 아니면 제가 이 강의의 코드를 이해하고 코드 작성을 따라가기 위해 도움될만한 방법이 있을지 궁금합니다

  • spring
  • 객체지향
박지성 댓글 1 좋아요 0 조회수 535

영상 마지막에 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' }

  • spring
  • 객체지향
박지성 댓글 1 좋아요 0 조회수 527

어떻게 공부 해야 할까요.

스프링 핵심 원리 - 기본편

4줄 요약 저는 프로그래밍 초보자로, 회사에서 스프링과 Vuejs를 공부하라는 지시를 받았습니다. 하지만 자바의 기본 지식이 부족해 강의를 따라가기 어렵습니다. 현재 학업, 스프링, Vuejs, 빅데이터 대회준비를 동시에 진행하고 있어 시간도 부족합니다. 자바로 돌아가서 기초를 쌓아야 할지, 스프링 진도를 계속 나가야 할지 고민입니다. 주서. 저는 눈 가리고 귀 막은 상태로 강의를 듣고 싶지 않습니다, 저는 오래 산업에 종사하신 분들의 현실적인 조언이 필요합니다. 안녕하십니까. 곧 인턴으로 투입되기 위해 강의를 듣고 있는 얼리어잡터입니다. 제 배경은 이렇습니다. 객체지향프로그래밍 경험은 이 스프링 강의 속 코드를 보며 따라친 게 처음입니다. 회사에선 자바의 기본적인 문법만 공부하고 바로 스프링으로 들어가라고 하였습니다. 저는 학교에서(대학교가 아님) 수업들은 C와 Python의 경험을 토대로 자바의 겉 부분을 공부하고 스프링으로 넘어오게 되었습니다. 헌데 제가 자바의 겉 부분을 제가 잘 못 핥았는지 지금까지 들은 강의 내용을 전부 이해한다는 생각이 전혀 안들어 인턴인데 첫 회사 업무를 잘 수행 할 수 있을지가 의심이 들었습니다. 지금 제일 조언이 필요한 부분은 학업, 스프링, Vuejs, 빅데이터 대회 전부를 동시에 진행하고 있는데요 현재 자바도 잘 모르는데 final 이든 데이터 구조든 처음 보는 골뱅이 @Test 이런 것이 자바에서 어떻게 동작하는지 잘 몰라도 시간이 2개월 정도 밖에 남지 않았으니 그냥 스프링 진도를 나가는 것이 맞는지 아니면 스프링은 일단 접어두고 제대로 기초 공사 자바부터 차근차근 철근을 하나씩 박으면서 역량을 쌓기 위해 자바로 돌아가야 할지, 현업에 오래 종사하신 분들의 조언이 필요합니다

  • spring
  • 객체지향
  • 고민
찬빈 댓글 1 좋아요 1 조회수 543

스프링 완전정복 로드맵을 수강중 JPA책공부

스프링 DB 2편 - 데이터 접근 활용 기술

안녕하세요. 김영한 강사님의 Spring 완전 정복 로드맵을 수강중인 학생입니다. 지금 DB 2편까지 수강을 마쳤는데 여기서 다음으로 바로넘어갈지 아니면 JPA책을 읽어볼지 고민중인데요. 이미책은 구입해놔서 실행에만 옮기면되서 조언구하고싶습니다. 시간은 굉장히여유로워서 순서가중요할것 같습니다!

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
김준영 댓글 1 좋아요 0 조회수 339

변경사항 이력이 관리되면 더 좋을 거 같아요

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

저는 특정강의부터 따라하면서 보고 싶은데 완료프로젝트에 git으로 각 강의마다의 결과가 반영되었으면 더 좋았겠다는 생각이 들었어요 ! 좋은 강의 감사드립니다.

  • java
  • spring
  • kotlin
  • spring-boot
  • 리팩토링
홍순엽 댓글 0 좋아요 0 조회수 390

강의 내용 참고해서 교육 동영상을 만들어도 괜찮을까요?

스프링 핵심 원리 - 기본편

안녕하세요 저는 강사님 커리큘럼을 따르고 있는 학부생입니다. 학교 전공수업에 오픈소스 교육자료를 만드는 과제가 있습니다 소프트웨어 툴, 개발 도구 등에 대한 동영상 강의를 제공하는 비영리의 관련 학교 채널 유트브에 올라갈것이며 동영상에는 (CC BY-NC 4.0) 라이센스가 적용되어 올라갈것 같습니다 이 동영상에서 스프링의 기초적인 내용을 설명하기 위해 제가 배웠던 강사님의 강의내용을 바탕으로 30~40분 분량의 관련 교육 영상을 만들고 싶습니다. 물론 강의내용을 그대로 사용하지않고 부분부분 배운내용을 기반으로 요약하는 식으로 영상을 만들 생각입니다 김영한 강사님 강의의 ppt 자료는 사용하지않고 따로 제가 만들어서 사용할 것 이지만 강의에서 사용된 예제 코드(member service예제) 및 배운내용을 사용해도 저작권에 문제가 없을지 출처를 남겨야한다면 동영상에 어떤식으로 출처를 남기면 좋을지 문의드립니다

  • spring
  • 객체지향
kakaneymar 댓글 1 좋아요 0 조회수 306

강의 순서에 대한 질문입니다

스프링 부트 - 핵심 원리와 활용

삭제된 글입니다

  • spring
  • spring-boot
  • prometheus
  • grafana
김김이 댓글 1 좋아요 0 조회수 246

자바 스프링 공부 방향과 로드맵

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

삭제된 글입니다

  • java
  • spring
  • mvc
  • spring-boot
  • jpa
  • 로드맵
srbboot 댓글 1 좋아요 0 조회수 1756

강의 멈췄다가 재생할때

스프링 핵심 원리 - 기본편

삭제된 글입니다

  • spring
mangs 댓글 1 좋아요 0 조회수 457

idea 명령어가 안먹는 경우해결 방법

토비의 스프링 부트 - 이해와 원리

안녕하세요. 강의를 듣다가 idea 커맨드를 실행하였으나 먹히지 않아 찾아본 결과 Jetbrains Toolbox를 사용하여 설치한 경우에 실행 쉘 스크립트를 지원하는 것 같습니다. https://www.jetbrains.com/help/idea/working-with-the-ide-features-from-command-line.html#e3487884 툴박스 설치 $ brew install --cask jetbrains-toolbox 툴박스 UI에서 IntelliJ 설치 IntelliJ 설정에서 셸 스크립트 이름 확인 가능 만약 툴박스를 사용하지 않고 수동 설치한 경우 아래와 같이 수동으로 쉘 스크립트를 작성해야 사용 가능합니다. $ sudo vim /usr/local/bin/idea #!/bin/sh open -na "IntelliJ IDEA.app" --args "$@" $ sudo chmod +x /usr/local/bin/idea 저와 같은 고민을 하고 계신분에게 도움이 되었으면 합니다. 감사합니다.

  • spring
  • spring-boot
  • intellij
  • jetbrains
  • toolbox
  • idea
Seunghoon Choi 댓글 1 좋아요 5 조회수 1401

PathPattern에 대한 몇가지 예시입니다.

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

설명 PathPattern 공식 문서 ? : 한 문자 일치 /pages/t?st.html YES: /pages/test.html , /pages/tXst.html NO : /pages/toast.html * : 경로( / ) 안의 모든 문자 일치 /resources/*.png YES: /resources/photo.png NO : /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/robots NO : /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 {*...} 또는 ** 패턴 요소 다음에는 다른 패턴 데이터 를 사용할 수 없습니다.

  • spring
  • mvc
김회민 댓글 1 좋아요 2 조회수 5313

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

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

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

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

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) { .... }

  • swagger
  • spring
rnqhstlr2297 댓글 0 좋아요 1 조회수 461

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

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

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

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

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 조회수 11527

진짜 강의 구매하길 잘했다는 생각이 너무 듭니다 🥹

스프링 핵심 원리 - 기본편

- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아직 강의를 완강한 것도 아니고 로드맵을 전부 구매하지는 않았지만 지금까지의 설명을 들었을 때 사람들이 그렇게 호평한 이유를 알 것 같습니다! 주워들었던 용어들에 불과했던 IoC, DI, SOLID 원칙 등등.. 특히 역할과 구현 분리 부분에서 자동차와 연극 비유는 레전드였습니다 👏👏 사실 저는 그동안 node.js 기반으로만 개발 공부를 하고 있었어서 처음에 스프링 무료 버전을 들었을 때 까지만 하더라도 유료 강의들로 넘어간다고 해서 내가 이해할 수 있을까..? 라는 불안감이 있었는데, 지금처럼 계속 공부한다면 충분히 스프링도 익숙해질 것이라 생각하게 되었습니다! 영한 님이 이 글을 보실지는 모르겠지만.. 진짜 감사드립니다 👍👍👍 모르는 게 생기면 바로 바로 여쭤보겠습니다!

  • 스프링부트
  • 김영한
  • 스프링
  • springboot
  • 객체지향
  • 자바
  • spring
devholic 댓글 2 좋아요 0 조회수 646

인기 태그

인프런 TOP Writers

주간 인기글