오늘은 Spring Boot로 웹 애플리케이션을 만들면서 실제로 작동하는 컨트롤러와 서비스 코드를 작성해보았다. 개발 도중 겪은 문제들과 해결 과정을 간단히 정리해본다.@Autowired는 Spring이 MemberService의 인스턴스를 자동으로 주입해주는 어노테이
Let's break down:Example:@Builder is a Lombok annotation that automatically generates a builder class for BoardVO.This is a static method generated by
the difference between:andLet’s break it down gently and clearly:This is the normal setter method used when:You create an object using newThen set val
While testing my Spring Boot project’s DAO layer, I ran into a silent error — nothing too dramatic, but something that stopped my test from working pr
While testing my Spring Boot app, I wanted to log messages at different levels using Lombok’s @Slf4j. But something was off...I created a class that l

jar 파일 > 우클릭 > 터미널 실행탭 눌러서 파일명 나오게 하고java -jar target/Chapter03-0.0.1-SNAPSHOT.jar --server.port=8081java -jar 파일명 그리고 서버 실행되면 웹브라우저에서 매핑 등 작동확인하거나 포스

https://www.h2database.com/html/main.html데이터베이스 없다뜸 생성 ~/test 혹은 ./test 데이터베이스 만들기재연결스프링프로젝트가 아니라 자바 메이븐프로젝트 생성pom.xml에 라이브러리 업로드https://mvn

안녕하세요! 오늘은 Spring Data JPA를 사용하면서 자주 헷갈릴 수 있는 EntityManagerFactory와 Repository 인터페이스, 그리고 H2 데이터베이스 실행 실수에 대해 정리해보려고 합니다.실제 코드 예시와 함께, 실무에서 자주 마주치는 실수
Spring Boot와 JPA로 게시판을 만들면서 겪었던 다양한 실수와,그 원인, 그리고 올바른 해결 방법을 한 번에 정리합니다.실제 코딩 예시와 함께, 초보자가 헷갈리기 쉬운 부분을 콕 집어 설명합니다!JPA의 모든 데이터 조작(CRUD)은 영속성 컨텍스트라는 컨테이

Spring Data JPA에서는 Pageable 인터페이스를 활용해 페이징 처리를 간편하게 할 수 있습니다. 오늘은 Board 엔티티를 기준으로, 제목에 특정 키워드가 포함된 게시글을 페이징하여 조회하는 테스트 코드를 소개합니다.findByTitleContaining
Spring Data JPA에서는 Pageable을 활용해 페이징뿐 아니라 정렬까지 간단하게 구현할 수 있습니다. 이번 글에서는 Board 엔티티의 seq 필드를 기준으로 내림차순 정렬하면서 페이지 단위 조회하는 테스트 코드를 소개합니다.0 → 첫 번째 페이지 (페이지

Spring Data JPA에서는 Pageable과 Page<T>를 함께 사용하면 페이징 처리된 데이터를 조회함과 동시에, 전체 페이지 수, 전체 데이터 개수, 다음 페이지 정보 등 다양한 정보를 함께 다룰 수 있습니다.Page<T>를 반환하면 페이징 처리된

Spring Data JPA를 사용하면 @Query 어노테이션을 통해 직접 JPQL(JPA Query Language)을 작성할 수 있습니다. SQL과 비슷해 보이지만 엔티티 중심으로 동작하기 때문에 몇 가지 중요한 차이점과 주의할 점이 있습니다. 이 글에서는 @Que

project > run as > maven installWhile working on my Spring Boot project, I ran into a small issue that made me pause and think about how Spring handle
로딩시점 파싱, 컴파일시점에 오류못잡음 /따라서 한줄씩 테스트해가며 완성해야함. 네이티브쿼리는 똑같이 쿼리스트링을 씀. 일반적쿼리랑 같음. ||이건 스트링 붙이는 h2에서 쓰는 연산자 . 오라클,마이에스큐엘 등 랭귀지에따라 다름. 특정클래스 데이터타입이 아니라 알수없
ㅂ보드레파지토리 파일@Query("SELECT b.seq, b.title, b.writer, b.createDate FROM Board b " \+ "WHERE b.title like %?1% ORDER BY b.seq DESC") List<Objec
Spring Data JPA에서는 카멜 케이스(CamelCase) 필드명과 언더스코어(underscore) 방식으로 작성된 데이터베이스 컬럼명 간의 매핑을 자동으로 처리할 수 있습니다. JPA에서는 기본적으로 필드명과 컬럼명 간의 변환을 자동으로 해주는데, 카멜 케이스

쿼리어노테이션, 메소드는 쿼리문의 고정이라는 단점이 있으니 런타임에 쿼리문을 만드는 동적쿼리 방식이 있음 하나의 방법은 MYBatis(쿼리스트링 메소드명을 붙이듯 아이디에 이름을 붙이고 , 매서?라는 기능이 매핑을해줌. xml형태로 쿼리문을 빼놓고 id를 호출하는 시점
좋아요! 지금 작성한 코드는 QueryDSL을 활용한 동적 쿼리 예제예요. 각 부분을 천천히, 아주 자세하게 설명드릴게요. 😌이 코드는 사용자의 검색 조건(searchCondition) 과 검색어(searchKeyword) 에 따라 조건문을 동적으로 생성하고, 해당

Temp Body
맞아요! JPA나 Spring Boot에서 데이터베이스 연결이 잘 안 될 때, 가장 먼저 확인해봐야 할 곳이 바로 resources/application.properties 또는 application.yml 파일이에요.여기서 드라이버 설정이 잘못되었거나 누락되었을 때는

application.properties 설정 파일이 application.properties 설정 파일은 Spring Boot 프로젝트에서 H2 인메모리 데이터베이스를 사용하면서 JPA 설정을 테스트 용도로 구성한 예입니다. 각 항목이 어떤 역할을 하는지 부드럽게 정
사용자가 검색에 필요한 조건을 요청할 수 있도록 키워드랑 페이지 정보를 담는 DTO(Data Transfer Object)예요.📌 이 필드는 사용자가 요청 URL에 파라미터로 넘길 수 있는 값이에요.예: Querydsl에서 동적으로 조건문을 추가해주는 "조건 빌더"
좋습니다! 이제 주어진 Board 클래스를 기준으로, 조건을 적용해 동적으로 쿼리를 생성하는 완성된 코드를 만들어 보겠습니다. 예시에서는 BoardFilter 클래스의 key와 value를 이용해 조건을 적용하고, BooleanBuilder와 QBoard를 이용해 Qu

http://localhost:8080/h2-console/ spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:test spring.datasource.user
@Service를 붙인 BoardServiceImpl는 Spring이 자동으로 객체(Bean)로 등록합니다.BoardController에서는 private final BoardService boardService;를 선언하고, 생성자 주입으로 Spring이 BoardS

Spring MVC를 처음 공부하면서 가장 헷갈리는 부분 중 하나는"Controller에서 View(JSP)를 어떻게 찾는가?" 입니다.이번 포스팅에서는 직접 만든 게시판 예제를 통해 인터페이스 구조와 ViewResolver의 동작 방식까지 깔끔하게 정리해볼게요.📍

보드 서비스 임플에서 시퀀스를 받는 이유는 , jsp에서 a 하이퍼링크에 쿼리스트링이 seq? 로 되어있기때문. 업데이트 오류 : 포워드의 경우엔 기존에 본인이 가진 매핑방식을 가지고 포워드하는거라 , 업데이트 메소드가 포스트매핑되어있고 리턴이 포워드로 되어있는데 제일

인서트 뷰랑 그냥 인서트 a 태그 관련해서 , 이해한 것 정리 = > a 태그 인서트뷰로 하이퍼링크가 걸려있다 , 그러면 보드 컨트롤러의 것매핑어노테이션도 인서트뷰로 바꿔줘야함. 그러면 리턴이 인서트보드인데 그러면 인서트보드.jsp를 호출하고 그러면 글등록하는 창이 뜸
뷰와 게시글 업로드 코드 구분시게시글 목록 페이지 (getBoardList.jsp): 게시글 목록을 출력하고 각 게시글을 클릭하면 상세보기 페이지로 이동합니다.게시글 상세 페이지 (getBoard.jsp): 게시글의 상세 내용과 함께 수정/삭제 링크가 제공됩니다.새 글

타임리프 사이트pom.xml 에 타임리프 디펜던시 추가어플리케이션 프로펄티에 캐시설정 폴스컨트롤러 작성템플릿폴더 아래 html작성템플릿 엔진이 사용하는 파일은 기본적으로 resources/templates 폴더에 위치합니다.각 템플릿 엔진은 고유한 파일 확장자를 가집니
jsp와 차이점은 없음.다만 html코드가 jsp와 약간다른정도. 형태는 거의 유사함. spring el이라고 하는것. jsp는 모델에 데이터를 담아서 넣어도 한계가 있으나 스프링el은 스프링에서 사용하는 모든데이터 타입을 다받음. 이걸 다 지원하는 애가 타임리프하나밖

업로드중..이 코드에서 each 문 안의 board로 적는건 boarder 라고 적음. 그래서 td 안에 board.title 등이 제대로 안먹혔던 것. 처음 확인 한건 = 데이터베이스가 제대로 연결되어있는가 두번째 ,화면에 뜨는 에러메세지 세번째 , 콘솔에 뜨는 에러

위와 아래의 차이위는 첫번째 테이블에서 스테이트 카운트를 사용하기때문에 루프를 돌때 state: boardList를 썼고아래는 board 의 seq라는 필드를 사용하기에 스테이트 필요없어서 사용안함둘다 똑같은 화면이지만(a태그 제외 ) 번호를 뭘로 처리했느냐의 차이

로그인 = 세션 세션에 로그인했다는 정보르 남겨두는 것. 객체가되든 특수한 데이터정보든... 그러면 로그인되었다 인증됨. jsp,서블릿, 부트 다 똑같음. 다만 jsp에선 세션에 저장된 정보를 다 읽어옴. 겟오브젝트해서.. 부트에선 그것보단 주입받는방식으로 끝냄 타임
스프링 익셉션객체는 보안때문에 못넘긴다. 유저정의 익셉션은 객체넘길수있는데 그냥 익셉션객체는 안되.ㅁ 그래서 익셉션.겟메세지 , 익셉션.스택트래이스 이렇게 따로따로 넘겨줘야함. 스프링에서 기본적으로 제공하는 Exception 객체는 내부에 민감한 정보(예: 서버 경로,
“객체 생성과 의존 관계를 직접 관리하지 않고, 스프링이 대신 해준다.”예전 방식: 객체를 new 해서 만들고 직접 연결스프링 방식: 객체 생성과 관계 주입을 스프링 컨테이너가 대신 처리예시 (전통 방식 vs IoC 방식)“필요한 객체를 내가 직접 만들지 않고, 외부에

인증 = 로그인 authentication / 인가 authorization= 특정 폴더에 접근 할 수 있는가 없는가 , 특정 url에 접근권한이 있냐 인증유지 = 세션 로그인 모델어트리뷰트 주입 등의 구조를 스프링 시큐리티로 구현Spring Security에서 인증

시큐리티 필터 체인 관련해서 , 필터체인프록시는 톰캣이 관리하는 서블릿컨테이너에 올라가고 시큐리티 필터는 프록시에 의해 실행되는데 이건 ioc(스프링부트)에 올라간다p421시큐리티 필터체인을 내가 @Congifuration 등록하면 UsernamepasswardAuth

MemberInitialize 파일이 test폴더 안에 있는거라 일반자바 실행하듯이 ctrl+F11 눌러서 실행 h2 켜져있어야함 엔티티매니저 어쩌고 오류 뜨는건 어플리케이션 프로퍼티 설정이 잘못된 경우가 많음 확인해보니 유알엘을 잘못입력해둠쿠키는 저장방식, jwt는

클래스 앞의 @Entity 어노테이션은 jpa쓸거다 . 이거 db랑 연결할거야 객체인데 테이블로바꿔야해 알려주는거JPA의 리플렉션 개념(객체 만들고 메소드 호출 안해도 되는거)을 쓰기위해선 @AllArgsConstructor@NoArgsConstructor 를 적어둬

위에껀 public SecurityConfig(OAuth2SuccessHandler successHandler)라는 생성자가 자동 생성되어 매개변수로 final붙은 필드애들을 자동 생성하여 주입하는것이고만약 final 없애고, @RequiredArgsConstructo
구글 등 OAuth 인증 서버에서 인증이 성공하면,미리 등록한 redirect_uri(예: http://localhost:8080/login/oauth2/code/google)로 인증 코드가 쿼리 파라미터로 담긴 채 리다이렉트됩니다5.이때, 인증 코드만 오고,

cmd에서 리액트 깔고 폴더 하나 만들고 C:\\workspace_full>npx create-react-app securityoauth2jwtreact

프론트엔드서버 켜고(securityoauth2jwtreact) npm start백엔드서버 켜고 (SpringBootSecurityJWTOAuth2)http://localhost:8080/login 들어가서 oauth 로그인 ( 구글로그인이나)OAuth2Succ

이렇게 워크스페이스 새로만들거나 아니면 이걸로 만들기Temp 폴더 안에 만들겠다..탐색기 가보면 만들어져있음임포트 프로젝트general > projects form folder or archive 선택 다운받은 압축파일 푼 폴더 선택임포트 됨. 근데 에러뜸로컬호스트로