전체 글 65

[SpringBoot] Spring Data Jpa와 관계형 데이터베이스

--- 저를 위한 공부입니다많은 부분이 생략되어 있습니다 ---    1. MyBatis와 JPA 1) MyBatis - SQL Mapper - 쿼리를 매핑2) JPA - 자바 표준 ORM(Object Relational Mapping) - 객체를 매핑     2. 관계형 데이터베이스와 객체지향 프로그래밍 1) 관계형 데이터베이스 : 어떻게 데이터를 저장할지에 초점2) 객체지향 프로그래밍 : 메시지를 기반으로 기능과 속성을 한 곳에서 관리  * 먼저 JPA가 어떻게 등장하게 되었나? → 관계형 데이터 베이스와 객체지향 프로그래밍 언어의 패러다임이 서로 다른데, 객체를 데이터베이스에 저장하려고 하니 여러 문제가 발생 = 패러다임 불일치 → 상속, 1:N 등 다양한 객체 모델링을 데이터베이스로는 구현할 수 ..

Spring 2024.05.13

[SpringBoot] 스프링 부트와 테스트 기초

--- 저를 위한 공부입니다많은 부분이 생략되어 있습니다 ---     1. Application.java import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.data.jpa.repository.config.EnableJpaAuditing;@EnableJpaAuditing // JPA Auditing 활성화 어노테이션@SpringBootApplicationpublic class Application { public static void main(String[] args){ Sprin..

Spring 2024.05.08

[Spring] WAS가 도대체 뭔데?

* WAS(Web Application Server): 웹 애플리케이션을 실행하기 위한 소프트웨어 환경을 제공하는 서버 / 클라이언트와 데이터베이스 사이의 중개자 역할- 클라이언트가 웹 브라우저를 통해 웹 애플리케이션에 접속하면, 클라이언트 요청이 웹 서버로 전달됨   * WAS의 역할 웹 애플리케이션 실행 환경 제공데이터베이스 연결동적 콘텐츠 생성 : 사용자가 웹 페이지를 요청할 때마다 서버 측에서 데이터를 처리하고(DB 조회 등) 결과를 동적으로 생성하여 반환통신 관리 : 클라이언트와의 통신을 관리하고 요청을 처리. HTTP 요청 수신, 응답 전송, 세션 관리스레드 관리 : 다중 사용자 요청을 처리하기 위해 스레드 풀을 관리하고 스레드 할당을 조정하여 이를 통해 동시에 여러 요청 처리하고 응답 시간을..

Spring 2024.04.11

[Spring] WebApplicationInitializer.java & ServletContextListener.java

* WebApplicationInitializer.java : Spring Framework에서 제공하는 인터페이스로 Spring 웹 애플리케이션을 설정하는 파일. web.xml 파일 대신에 자바 코드를 사용하여 서블릿 컨텍스트를 설정한다. 애플리케이션의 서블릿 컨텍스트를 초기화하고 설정하는 메소드를 제공하며, DispatcherServlet을 설정하거나 Spring Security를 구성하거나 기타 필요한 서블릿 컨텍스트 구성 작업을 수행한다. public class MyWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws Serv..

Spring 2024.03.22

[Spring] @Retention

* @Retention : @Retention은 자바 어노테이션을 정의할 때 사용되며, 해당 어노테이션의 유효 범위를 지정한다. 즉, 어느 시점에 해당 어노테이션 정보를 유지할 것인지를 결정한다. * RetentionPolicy 3가지(어노테이션이 사용되는 시점 정하기) 1. RetentionPolicy.SOURCE : 컴파일러에 의해 처리되며, 클래스 파일에는 포함되지 않는다. 즉, 소스 코드 레벨에서만 유효하고 런타임에는 존재하지 않는다. 런타임 때는 필요하지 않고 컴파일 할 때만 필요한 정보 → 주로 소스 코드 분석이나 프로세스 도구를 위한 어노테이션으로 사용 2. RetentionPolicy.CLASS : 컴파일러에 의해 처리되며, 클래스 파일에는 포함된다. 하지만, 런타임 시에는 클래스 파일에 ..

Spring 2024.03.20

[SQL] 데이터가 없으면 INSERT, 있으면 UPDATE (같은 데이터 중복 삽입 해결)

프로젝트를 하다보면 데이터를 삭제를 할 경우, delete문을 쓰는 게 아닌 삭제여부 = 'Y'와 함께 update를 할 때가 있다. 어떤 데이터를 insert 하고 다시 지우고 싶을 때 update를 하기 때문에 해당 데이터가 사라지는 게 아니라 삭제여부가 'Y'인 채로 남아있는데 이런 경우에 같은 데이터를 다시 insert 하면 삭제여부만 'N'인 똑같은 내용의 새로운 행이 추가된다. 만약 그 데이터를 또 삭제하려고 update하고 또 insert하고 계속 반복하다보면 삭제여부 = 'Y'의 똑같은 행이 무한 생성된다^^! 예를 들어 'TABLE01'이라는 테이블에 MBR_SN, MENU_SN, DEL_YN 데이터를 INSERT하고 싶다고 가정해보자. 그렇다면 코드를 이렇게 쓸 것이다. INSERT I..

Spring 2024.01.24

에러 - 파일 업로드 NullPointerException, ajax 실행은 되는데 404 not found

1. 파일 업로드 시 NullPointerException 에러가 날 때 : form 태그 안의 input = "file"의 name 값과 컨트롤러에서 받는 파라미터 변수 이름이 같아야 NullPointerException 에러가 나지 않음 2. ajax 실행은 되는데 404 not found 에러가 날 때 : 컨트롤러에서 ajax 요청을 받고 이에 대한 결과를 리턴해주어야 ajax의 success에 res 값을 가져갈 수 있음 그런데 컨트롤러에서 메서드를 void로 해둬서 리턴값이 없기 때문에 오류가 난 것!

에러정리 2024.01.16

Springboot 파일업로드

1. 첨부파일 공격에 대비하기 위한 업로드 파일의 확장자 제한 js로 파일 사이즈나 .exe, .zip 등의 파일을 확인할 수 있는 체크함수 만들기 var regex = new RegExp("(.*?)\.(exe|sh|zip|alz)$"); formData에 데이터 추가하면서 체크함수로 파일 확인 2. 동일한 이름으로 파일이 업로드 됐을 때 기존 파일이 사라지는 문제 중복된 이름의 파일 처리 중복이 발생할 가능성이 거의 없는 문자열 생성해서 처리(시간을 밀리세컨드로 저장, UUID 적용 등) UUID(Universally Unique Identifier) : 네트워크 상에서 고유성이 보장되는 id를 만들기 위한 표준 규약 UUID uuid = UUID.randomUUID(); String uploadFi..

Spring 2024.01.16

Springboot 페이징

Pageable - Spring Data Jpa 1. public void home(@PageableDefault(page = 1) Pageable pageable){...} : controller에서 메서드 파라미터에 이 어노테이션과 함께 Pageable 선언하고 페이지 디폴트값 입력 2. Pageable을 파라미터로 해 가져온 결과는 Page 객체로 반환 3. Page 객체에 있는 Pagination 구현 시 기억하면 좋은 메서드 getContent() : 요청 페이지에 해당하는 글 getTotalElements() : 전체 글 개수 getPageNumber() : DB로 요청한 페이지 번호 getTotalPages() : 전체 페이지 개수 getSize() : 한 페이지에 보여지는 글 개수 hasP..

Spring 2024.01.16