이야기를 나눠요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
웹 브라우저에서 hello world가 안보이던 이유
강의 9분에서 진행되던 파라미터를 Response에 다시 돌려주던 부분에서 저는 왜 에러 페이지가 뜰까 고민하다가 발견한 것을 정리했습니다.강의 처음부터 service 메소드를 오버라이딩할 때 super.service(req, resp);가 없었지만 Ctrl + Shift + A를 통해 자동으로 생성할때에는 저 한 줄이 자동으로 붙습니다. 이를 제거해주지 않으면 에러페이지가 표시되고, 응답은 405로 표시됩니다.저 코드의 의미는 부모 클래스의 service 메소드를 실행하라라는 의미인데, 들어가보면 아래의 코드를 만날 수 있습니다.if (method.equals(METHOD_GET)) { long lastModified = getLastModified(req); if (lastModified == -1) { // servlet doesn't support if-modified-since, no reason // to go through further expensive logic doGet(req, resp); } else { long ifModifiedSince; try { ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE); } catch (IllegalArgumentException iae) { // Invalid date header - proceed as if none was set ifModifiedSince = -1; } if (ifModifiedSince < (lastModified / 1000 * 1000)) { // If the servlet mod time is later, call doGet() // Round down to the nearest second for a proper compare // A ifModifiedSince of -1 will always be less maybeSetLastModified(resp, lastModified); doGet(req, resp); } else { resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED); } } }나름 해석해보면 GET 요청이 올 때, doGet 메소드로 보내는 것을 확인할 수 있고, doGet 메소드는 아래와 같습니다.protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String msg = lStrings.getString("http.method_get_not_supported"); sendMethodNotAllowed(req, resp, msg); }코드를 보면 상속을 하지않은 원형 doGet 메소드는 405코드로 바로 응답하도록 작성되어 있는 것을 확인할 수 있습니다.이를 해결하는 방법은 2가지가 있습니다.상속받은 HelloServlet의 service 메소드에서 super.service(req, resp)를 제거하는 것.상속받은 HelloServlet에 doGet 메소드를 추가로 오버라이딩해서 그곳에 Response를 조작하는 코드를 작성하는 것이 있습니다. 이에 해당하는 방법의 코드는 아래와 같습니다.@WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException { super.service(req, resp); System.out.println("HelloServlet.service"); System.out.println("req = " + req); System.out.println("resp = " + resp); } @Override protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws IOException { // 파라미터 획득 String userName = req.getParameter("username"); System.out.println("userName = " + userName); // Response Header 설정 resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); // Response resp.getWriter().write("hello " + userName); } }
-
토비의 스프링 부트 - 이해와 원리
강의자료에 있는 디스코드 초대장 문제입니다.
강의 자료에 있는 디스코드 주소와 연결되어있는 하이퍼링크가 다릅니다. 따라서 클릭 시 올바르지 않은 초대장으로 연결됩니다.수정해주시면 감사하겠습니다. :)
-
스프링 DB 2편 - 데이터 접근 활용 기술
안녕하세요
질문은 아니라 서포터즈 님들 답변 안 달아주셔도 됩니다!!ㅎㅎ이번에 댓글 이벤트 참가했는데, 케익이랑 커피 쿠폰을 받게 되어서 선정해주신 김영한선생님께 감사하다는 말씀 드리고 싶어서 글 남겨요잘 먹고 열심히 공부하겠습니다감사합니다!!!인프런도 감사해요!!
-
토비의 스프링 부트 - 이해와 원리
부트 3.0 사용하시는 분들은 @RequestMapping 만으로 매핑이 등록되지 않으니 참고하세요.
삭제된 글입니다
-
스프링 부트 웹 개발 입문 - 따라하며 배우기
스프링 이해가 안되어서 듣고 있는데 ..
정말 너무 좋습니다 ㅠㅠ그동안 이해가 안되었던 부분들을너무 쉽게 설명해주셔서 잘 따라가고 있어요!동네 개발자 형이 옆에서 알려주는듯한 느낌.. ㅋㅋ좋은 강의 감사드립니다!
-
스프링 DB 2편 - 데이터 접근 활용 기술
서버 및 데이터 관련
안녕하세요 ! 백엔드를 공부하고 있는 학생입니다.제가 서버 및 데이터 그리고 현재 스프링, 스프링 부트까지 공부해 오면서 개발도 재미있지만 관련 내용을 더 깊게 공부해볼 수 있는 기회가 있으면 좋을 것 같다고 생각하여 관련된 내용에 무지하여 이렇게 질문을 올려봅니다.서버 및 인프라, 데이터 관련 석사를 생각해보고 있는데 현재 백엔드 지식을 활용 혹은 더 깊이 공부해 볼 수 있는 연구 분야가 뭐가 있는지 아시는지 궁금합니다. 석사를 생각하고 있는데 막상 어느 세부 분야를 공부해야 할지. 또한 개발과 연구는 다르기에 이와 같은 분야에서 연구한 것이 후에 개발관련하여 경력으로 인정이 될런지 여쭤보고 싶습니다.
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
model.addAttribute("data" , "hello!!"); 헬로안뜨네요
vscode 라서그런가요 hello!! 가 안되네요 다른거 다똑같이했는데 ㄷ
-
스프링 핵심 원리 - 기본편
이거다음 Jpa 보는걸 추천한다고 하셨는데 궁금한게 있어요
질문이 좀많은데 제가 잘몰라서 그러는데 JPA 가 DB 랑 관계 있는거아닌가요?DB 모르는상태로 JAP 봐도 상관없나요?그리고 스프링 MVC 모르는상태로도 JPA 를 봐도 상관없나요? 이해가 잘안가기도 하고 이럴땐 일단 프로젝트 해보면서 감좀잡고 다시보는게 좋다는 말이 많아서 프로젝트 한번 해보면서 감좀 잡고 나머지 다 다시 볼라고 하는데요마치 야생형이랄까요그 1번 입문 강의가 딱 제가 원하는 야생형 미리체험하기 같은데1번 기술만 배우려면 어떻게 보는게 좋은가요?예를들어 제가 커리큘럼 을 비교해서 최대한 비슷한거 골라봤는데mvc2편>db2편>핵심원리 (5번>7번>8번) 이렇게 3개만 보면 혼자 프로젝트를 만들수있을가요?
-
자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
2018년 강의
자바 1.8, 스프링 4.1, 이클립스를 사용하는 강의입니다.
-
토비의 스프링 부트 - 이해와 원리
강의 중 토비님이 사용하신 단축키 모음
워낙 손이 빠르시고 단축키에 익숙하셔서 인텔리제이를 좀 사용해본 분들이 아니면 이 코드가 갑자기 어디서 생겨났는지, 이 화면이 대체 어떻게 뜬건지 모를 것 같아 정리해봤습니다. 일단 기억에 남는 것 위주로 작성했는데, 더 생각나거나 아직 다 본게 아니므로 그 이후에도 보이면 더 적겠습니다.윈도우 기준 인텔리제이 단축키 입니다. 변수 뒷부분부터 작성한 후에 갑자기 변수타입이랑 변수명 알아서 생성되는거(가장 자주 보임) -> 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으로 그룹 추가한 후 진행)
-
토비의 스프링 부트 - 이해와 원리
'@Conditional과 @Condition' 강의 - 스프링부트3.0 이상으로 안되는분들
Jetty does not yet support Servlet 6.0. To use Jetty with Spring Boot 3.0, you will have to downgrade the Servlet API to 5.0. You can use the jakarta-servlet.version property to do so.(https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide)에 따라 build.gradle에ext['jakarta-servlet.version'] = '5.0.0'위의 문장을 추가해야 동작 가능합니다.
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 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 참고해주세요
-
서울시 뉴딜일자리사업으로 블록체인분야 월260만 3개월 인턴시켜주는 프로그램 추천합니다.
블록체인 분야 기술을 배우고싶은 분들 or 블록체인 분야 취업을 원하시는 분들 주목! 서울시에서 뉴딜일자리사업 일환으로 IT 블록체인과정으로 3개월 인턴십 (급여 월 260) 보내주는 프로그램 진행중인데 신청해보세요! https://blog.naver.com/kjc_sh/222745988610 자세한 내용은참고해주세요 오픈카카오톡 문의 [ https://open.kakao.com/o/stkiOIhe ]
-
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
MSA 와 관련하여 질문드립니다.
안녕하세요 완강 후 추가적으로 궁금한 사항이 있어서 글을 올리게 되었습니다. 요즘 대세인 MSA와 관련하여 여쭙고 싶어서 연락드립니다. [문제상황] MSA와 관련하여 아키텍쳐에서는 요청에 맞추어 반응하는 서버를 만들기 위하여 docker container 를 활용한 서버들을 많이 구성하는 걸로 알고 있습니다. 이때, Spring boot은 다양한 기능들을 제공하지만 python의 flask나 Fastapi와 같은 가벼운 프레임워크에 비해서는 안좋은 점들이 있을것이라 생각듭니다. (예를 들어서 컨테이너의 용량이 크고, 콜드 스타트의 시작이 늦다는 점... 이 대표적으로 생각납니다.) [질의사항] 1. Springboot 로 MSA를 구성하였을 경우 앞서 얘기드렸던 문제점이 없는지 여부 2. Springboot 가 MSA에서 갖는 장점 3. 프레임워크의 무겁다와 가볍다의 개념이 무엇인지 궁금합니다. 4. 배민에서는 JAVA를 사용하여 프로젝트를 진행하는데, 우리나라의 경우 JAVA를 사용하는 시니어개발자들이 많아 사용하는 걸로 알고있습니다. 만약 그렇지 않았다면, JAVA Spring boot 가 아닌 다른 프레임워클 사용하여 개발하였을지 궁금합니다. 감사합니다.
-
반려동물 시장 진출 웹&앱 스프링 개발자 모집
안녕하세요 현재 서로 믿을 수 있는 스타트업 멤버 구축 되었고 추가로 능력있고 참하신 스프링 개발자 팀원 찾습니다. 현재 모두 메인 잡은 있는 상황이고 사이드 프로젝트로 운영중입니다. 관심있으신분 연락 부탁드립니다 1. 주제소개: 반려동물 서비스 중 현재 시장에 없는 서비스 2. 현재 진행 단계: 시장분석 및 명확한 주제와 컨텐츠 방향성까지 잡은 상태 3. 모집분야 및 주요업무: 앱 개발자-하이브리드 앱 (웹앱을 네이티브 형태로 감싼 형태) 유사사이트: https://www.pet-friends.co.kr/main/tab/2 4. 모집경력 및 필요스킬: 앱개발 관련하여 경력이 있거나, 최소 스프링을 자유롭게 다룰 수 있는 스킬 필요 vue.js 옵션,java 등 5. 참고기타사항: 기획/디자인/개발/마케팅 포지션 다 구성되어 있으나, 추가 개발자 필요한 상황 6. 문의/연락: 010-4590-4917 카카오: antoniobae1 7. 모임명: IT 웹 앱 마케팅 개발 창업모임 파랑새(Since 2021.10.02 : 네이버 카페 https://cafe.naver.com/lastpick1004 https://lastpick.modoo.at/ https://www.youtube.com/channel/UCpLCToWUvdjsPqkLRZ-wpZA 이 외 기획, 개발, 퍼블, 마케터 등 같이 큰 돈 벌고 싶으신 분 연락주세요:)