BACK/SPRING 36

[Spring] 스프링 핵심 원리 - 객체 지향 설계와 스프링

스프링의 탄생 2000년대 초반 자바 진영에서는 EJB가 표준 기술이였다. 트랜잭션 관리, 분산 기술등의 장점 하지만 비싸고 어렵다. 복잡하고 느리다 → 스프링과 하이버네이트 탄생 표준 인터페이스 : JPA JPA 구현체들: 하이버네이트, eclipseLink… 스프링은 EJB의 문제점을 지적하면서 등장하였고, 이름은 전통적인 J2EE(EJB)라는 겨울을 넘어 새로운 시작이라는 뜻으로 짓게 됨 스프링이란? 스프링 데이터: CRUD를 편리하게 사용 가능 (스프링 데이터 JPA 기술 많이 사용) 스프링 세션: 세션 기능을 편리하게 사용 가능 스프링 시큐리티: 보안 관련 스프링 RestDocs: API 문서와 테스트를 엮어 문서화를 편하게 해주는 것 스프링 배치: 배치처리(실시간으로 대량 데이터를 업데이트)에..

BACK/SPRING 2024.01.30

[SpringBoot] Thymeleaf form 태그

타임리프를 처음 써보면서 잘 몰랐던 문법에 대해 정리해보고자 한다. form th:action 폼이 제출될 URL이나 경로를 지정하는 데 사용 ex) th:action="@{/fileBoard/insertProc}"는 폼 제출 대상을 /fileBoard/insertProc URL로 설정 th:object 폼이나 템플릿의 특정 부분과 객체를 연결하는 데 사용 폼의 데이터 모델로 사용할 객체를 지정 ex) th:object="${fileBoardVO}"는 fileBoardVO 객체를 폼과 연결하여 Thymeleaf가 폼 입력값을 fileBoardVO 객체의 해당 속성과 바인딩 th: field th:field 속성은 폼 필드를 특정 객체 속성에 바인딩하는 데 사용 주로 , , 와 같은 폼 입력 요소에서 사용..

BACK/SPRING 2023.06.09

[Spring] Servlet 동작 방식

서블릿이란? 서블릿이란 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술입니다. 서블릿 동작 방식 Spring MVC에서 Controller로 이용되며, 사용자의 요청을 받아 처리한 후에 결과를 반환합니다. 사용자가 url을 입력하면 http request가 servlet 컨테이너로 전송됩니다. servlet 컨테이너는 httpServletRequest, HttpServletReponse 객체를 생성합니다. web.xml 기반으로 사용자가 요청한 url이 어느 서블릿에 대한 요청인지 찾고, 해당 서블릿에서 service 메소드를 호출한 후 get, post 여부에 따라 doGet()이나 doPost()를 호출합니다. 메소드는 HttpSer..

BACK/SPRING 2023.05.23

스프링MVC - 웹 애플리케이션의 이해

웹에서는 모든 것이 HTTP 기반으로 데이터를 주고받는다. HTML, TEXT IMAGE, 음성, 영상, 파일 JSON, XML (API) 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 웹 서버(Web Server) HTTP 기반으로 동작하는 서버 정적 html파일을 HTTP 요청하면, HTTP 응답으로 반환해준다. 정적(파일) HTML, CSS, JS, 이미지, 영상등 ex) NGINX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함 (정적 리소스 제공 가능) HTTP 요청이 오면 프로그램 코드를 실행해서 애플리케이션 로직 수행 사용자마다 다른 화면 제공 가능 동적 HTML, HTTP API(JSON) 제공 서..

BACK/SPRING 2023.02.12

Spring Boot Project(7) - 서비스 인증과 권한 부여

인증과 인가 등의 보안 기능을 추가하기 위해 스프링 시큐리티를 사용해보겠다. 인증 사용자가 누구인지 확인하는 단계 로그인 - 데이터베이스에 등록된 아이디와 패스워드를 사용자가 입력한 아이디와 비밀번호와 비교해서 일치여부를 확인한다. 로그인에 성공하면 서버는 응답으로 사용자에게 토큰을 전달한다. 인가 인증을 통해 검증된 사용자가 애플리케이션 내부의 리소스에 접근할 때 해당 리소스에 접근할 권리가 있는지 확인하는 과정 리소스 접근할 때 사용자가 전달한 토큰을 통해 권한 유무를 확인한다. 스프링 시큐리티 애플리케이션의 인증, 인가 등의 보안기능을 제공하는 스프링 하위 프로젝트 스프링 시큐리티는 서블릿 필터(servlet filter)를 기반으로 동작한다. DispatcherServlet 앞에는 필터가 배치되어..

BACK/SPRING 2023.01.31

Spring Boot Project(5) - 게시글 페이징, 필터링하기

Pageable을 이용하면 간단하게 Pagination 와 Sorting을 처리할 수 있다. PostsRepository public interface PostsRepository extends JpaRepository { Page findAll(Pageable pageable); @Query(value="select p from Posts p where p.subject = :subject and p.division = :division and p.is_progress = :is_progress") Page findAllByFiltering(Pageable pageable, @Param("subject") String subject, @Param("division") String division, @P..

BACK/SPRING 2023.01.24

Spring Boot Project(4) - JPA Auditing으로 생성/수정 시간 자동화

JPA Auditing으로 생성시간/수정시간 자동화하기 domain 패키지에 BaseTimeEntity 클래스를 생성한다. 이 클래스는 모든 Entity의 상위 클래스가 되어 Entity들의 createdDate, modifiedDate를 자동으로 관리한다. @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity { @CreatedDate @Column(updatable=false) private String createdDate; @LastModifiedDate private String modifiedDate; @PrePersist public void onPr..

BACK/SPRING 2023.01.24

Spring Boot Project(3) - 게시글 CRUD

게시물 Entity domain 패키지를 만든다. 도메인이란 게시글, 댓글, 회원 등 소프트웨어에 대한 요구사항 혹은 문제 영역이다. @Getter @NoArgsConstructor @Entity public class Posts extends BaseTimeEntity { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) @Column(name="post_id") private Long id; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="member_id") private Member member; @Column(length = 500, nullable = false) private String title; ..

BACK/SPRING 2023.01.24

Spring Boot Project(2) - 프로젝트 세팅, MySQL 연동하기

프로젝트 생성 프로젝트 설정을 해준다. 프로젝트에서 사용할 의존성을 추가한다. plugins { id 'java' id 'org.springframework.boot' version '2.5.6' id 'io.spring.dependency-management' version '1.1.0' } group = 'com.toy' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring..

BACK/SPRING 2023.01.24