본문 바로가기

Study/Spring & Spring Boot

(8)
@Autowired 대신 @RequiredArgsConstructor Autowired는 그 이름처럼 상횡에 맞게 IoC 컨테이너 안에 존재하는 Bean을 자동으로 주입해준다. 보통은 다음과 같이 사용한다. @Service public class FoodService { @Autowired private FoodDelivery foodDelivery; } 하지만 요즘의 경향을 보면 스프링팀에서 Autowired의 사용을 권고하지 않는다. 아래와 같이 직접 생성자를 주입하여 사용하거나 @Service public class FoodService { private FoodDelivery foodDelivery; public FoodService(FoodDelivery foodDelivery) { this.foodDelivery = foodDelivery; } } lombok에..
[Spring Boot] 게시판 기능 구현하기(3) 답글 등록 및 글 수정/삭제 Mapper UPDATE BBS SET STEP = STEP + 1 WHERE REF = (SELECT * FROM (SELECT REF WHERE SEQ = #{seq}) AS BB) AND STEP > (SELECT * FROM (SELECT STEP WHERE SEQ = #{seq}) AS BB2) INSERT INTO BBS (SEQ, ID, REF, STEP, DEPTH, TITLE, CONTENT, WDATE, DEL, READCOUNT) VALUES (NEXTVAL('SEQ_BBS'), #{id}, (SELECT REF FROM BBS AS BB3 WHERE SEQ = #{seq}), (SELECT STEP FROM BBS AS BB4 WHERE S..
[Spring Boot] 게시판 기능 구현하기(2) 게시글 리스트에 페이징 기능 추가하기 라이브러리 준비 웹 브라우저는 화면에서 벗어나는 내용을 스크롤을 통해 보여주기 때문에 게시판 내에서 게시글의 리스트가 너무 많으면 사용자가 불편함을 호소한다. 그래서 웹에서는 페이징이라는 개념을 통해 한 페이지 당 보여줄 게시글 리스트를 조절할 수 있다. 페이징 기능을 사용하기 위해 라이브러리가 준비되어야 한다. https://github.com/josecebe/twbs-pagination 여기에서 jquery.twbsPagination.min.js라는 파일이 필요하며 전체적인 화면단을 보여주는 프로젝트의 구성은 다음과 같다. front |_ index.html |_ img |_ arrow.png |_ auth |_ account.html |_ login.html |..
[Spring Boot] 게시판 기능 구현하기(1) CRUD를 연습하기에 가장 좋은 기능이 게시판 구현이라고 생각한다. DB 구축하기 게시판 테이블 생성 DB 테이블을 구축하기 위해 다음 쿼리문을 작성해준다. show databases; use mysql; DROP TABLE BBS; CREATE TABLE BBS( SEQ INTEGER(8) PRIMARY KEY, ID VARCHAR(50) NOT NULL, REF INTEGER(8) NOT NULL, STEP INTEGER(8) NOT NULL, DEPTH INTEGER(8) NOT NULL, TITLE VARCHAR(200) NOT NULL, CONTENT VARCHAR(4000) NOT NULL, WDATE DATE NOT NULL, DEL INTEGER(1) NOT NULL, READCOUNT I..
[Spring Boot] AJAX를 사용한 비동기 통신 AJAX란? AJAX란 비동기 자바스크립트와 XML (Asynchronous JavaScript And XML)을 말합니다. 간단히 말하면, 서버와 통신하기 위해 XMLHttpRequest 객체를 사용하는 것을 말합니다. JSON, XML, HTML 그리고 일반 텍스트 형식 등을 포함한 다양한 포맷을 주고 받을 수 있습니다. AJAX의 강력한 특징은 페이지 전체를 리프레쉬 하지 않고서도 수행 되는 "비동기성"입니다. 이러한 비동기성을 통해 사용자의 Event가 있으면 전체 페이지가 아닌 일부분만을 업데이트 할 수 있게 해줍니다. (-- MDN --) 비동기 통신을 위해 사용하는 것으로 지금은 다소 퇴보되었다고 항간에서 이야기 한다. 대안책으로 axios를 많이 사용하는 추세이다.. AJAX 사용을 위한 ..
[Spring Boot] DTO, DAO, Service, Controller DTO 개요 DTO는 Data Transfer Object의 약자로 계층간 데이터 교환을 위해 사용하는 객체이다. DTO 내부에는 로직이 존재하지 않으며, 생성자와 getter, setter만 존재해야 한다. DTO 예시 import lombok.Getter; @Getter public class MemberDto { private String id; private String pwd; private String name; private String email; private int auth; public MemberDto() { } public MemberDto(String id, String pwd, String name, String email, int auth) { this.id = id; thi..
[Spring Boot] MyBatis로 DB연결, 접근 권한 설정 관리 DatabaseConfig DB와 직접 소통하기 위해서는 DAO가 필요하다. DAO와 DB를 중개해주는 것으로 여기서는 MyBatis를 사용한다. 스프링 프레임워크에서는 application-context.xml을 통해 bean으로 데이터베이스 관련 속성을 관리해주었다. 그러나 스프링 부트에서는 Java 클래스 파일로 관리하며 다음과 같이 작성하여 사용한다. MySQL 사용 시 import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; im..
[Spring Boot] 프로젝트 구조 및 초기 설정 개발환경 : IntelliJ IDEA 운영체제 : macOS Monterey 12.x.x CPU : Apple Silicon (ARM 64) Spring Framework MVC MVC는 Model, View, Controller 구성으로 Model은 Service와 DAO(Data Access Object)로 구성되어 있다. DAO가 MyBatis를 통해 DB로 부터 데이터를 가져오며 Service를 거쳐 Controller로 View에 뿌려주는 형식을 갖는다. 스프링 프레임워크의 문제점 구조적으로 위 그림처럼 DB에서 끄집어낸 정보를 서비스, 컨트롤러를 거쳐서 뷰로 가져가기 때문에 setAttribute로 전달해줄 값을 받아서 jsp에서 getAttribute로 뿌려주는 과정을 거쳤다. 때문에 컨트롤..