목록분류 전체보기 (200)
사이먼's 코딩노트
[Prefix 적용]현재까지 구현된 QuestionController.java 클래스를 살펴보면 2개의 URL 매핑이 되어있는 것을 확인할 수 있다.@GetMapping("/question/list")와 @GetMapping("/question/detail/{id}") 두 개다.Prefix란, 접두사 또는 시작부분을 가르키는 의미로 여기선 URL의 프리픽스가 모두 /question 으로 시작한다는 것을 알 수 있다.다시 말해, QuestionController.java 클래스에 속하는 URL은 모두 프리픽스가 /question 으로 시작하도록 설정할 수 있다.아래는 수정된 QuestionController.java 클래스의 코드이다.package com.sbs.sbb.Question;import lomb..
[Detail 링크 및 페이지 추가]question list에 대한 페이지까지 구현되었다면, 이번에는 question detail에 관한 링크 연결과 새로운 페이지를 추가해봅시다.question detail 페이지에 들어갈 내용은 각 question 데이터의 세부 정보이다.먼저 localhost:8090/question/detail 주소로 이동하는 링크를 만들기 위해선 question_list.html의 a태그를 활용해야 한다.아래와 같이 question_list.html 템플릿에서 코드를 작성한다. 번호 제목 작성일시 ..
[Thymeleaf 설치]스프링 부트에 타임리프를 설치하고 템플릿을 사용하여 페이지를 하나 만들어봅시다.Thymeleaf(타임리프)는 웹 애플리케이션 개발을 위한 서버 측 템플릿 엔진으로서, 여기서 말하는 템플릿은 HTML, CSS, JavaScript, XML 및 일반 텍스트를 의미한다.이번에는 HTML 템플릿을 생성하여 DB에 담겨진 전체 question 데이터를 가져와 페이지에 보여지도록 합시다.먼저 타임리프를 설치하기 위해선 build.gradle에 해당 라이브러리를 implementation을 해야한다.implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'implementation 'org.thymeleaf.extras:t..
[Repository로 DB 관리하기]QuestionRepository.java 클래스를 통해 question 데이터를 관리해봤다면, 이번에는 AnswerRepository.java 클래스를 통해 answer 데이터를 저장, 조회하는 방법을 알아봅시다. [answer 데이터 저장하기]answer 테이블에 데이터를 새로 저장하는 방법을 Repository를 통해 수행해봅시다.데이터를 새로 추가하여 저장할 때는 추가할 메서드는 없고, findById()를 통해 답변을 작성하고 싶은 question 데이터를 찾아 answer 데이터를 저장하면 된다.SbbApplicationTests.java 클래스에서 answer 관련 Repository를 사용하기 위해 @Autowired를 통해 객체를 생성해야 한다.아래와..
[Repository로 DB 관리하기]QuestionRepository.java와 AnswerRepository.java 클래스를 생성하고 SbbApplicationTests.java 클래스를 통해 테스트 형식으로 질문 데이터를 새로 생성하여 직접 DB에 저장해보는 작업을 마쳤다.이번에는 그 외의 여러가지 DB 관리하는 방법인 저장, 조회, 수정, 삭제를 하는 방법을 알아봅시다.현재까지 진행된 작업으로 실제 DB에 저장된 question 데이터들은 아래 사진과 같다. [findAll]findAll() 메서드는 question 테이블에 저장된 모든 데이터를 조회하는 역할을 한다.findAll() 메서드는 이미 QuestionRepository의 부모 격인 JpaRepository의 내장 메서드로서 따로 메..
[테이블 매핑하기]JPA 적용을 마쳤다면, 이번에는 엔티티로 DB 테이블을 매핑해보도록 합시다.여기서 말하는 엔티티는 DB 테이블과 매핑되는 Java 클래스를 말한다.현재 진행하고있는 sbb는 질문과 답변을 할 수 있는 게시판 서비스이기 때문에 sbb의 질문과 답변 데이터를 저장할 DB 테이블과 매핑되는 질문과 답변 엔티티가 있어야한다.각 엔티티에는 속성이 필요하는데, 이는 DB로 생각했을 때 컬럼과 같은 의미라고 생각하면 좋다. [질문 엔티티 생성]질문과 관련된 엔티티를 생성하기 위해 Question.java 클래스를 하나 생성한 다음 아래와 같은 코드를 작성한다.package com.sbs.sbb;import jakarta.persistence.*;import lombok.Getter;import l..
[Spring Security]이번에는 스프링 부트를 통해 프로젝트를 생성하고 스프링 시큐리티를 적용하는 방법에 대해서 알아봅시다.스프링 시큐리티는 기본적으로 인증되지 않은 사용자가 sbb와 같은 웹 서비스를 사용할 수 없게 만든다.따라서 이와 같은 인증을 위한 로그인 화면이 나타나게 되는데, 이러한 스프링 시큐리티의 기본 기능을 sbb에 그대로 적용되면 곤란하기 때문에 설정을 통해 바로 잡아야한다.스프링 시큐리티를 적용하게되면 로그인을 하지 않아도 게시물을 조회할 수 있다.SecurityConfig.java 클래스를 하나 생성한 다음 아래와 같은 코드를 작성한다.@Configuration@EnableWebSecuritypublic class SecurityConfig { @Bean Secur..
[스프링 부트 (SpringBoot)]Spring Boot는 웹 프로그램을 쉽고 빠르게 만들 수 있도록 도와주는 자바의 웹 프레임워크이다.Spring Boot는 Spring 프레임워크에 톰캣(Tomcat)이라는 서버를 내장하고 여러 편의 기능들을 추가하여 개발자들 사이에서 꾸준한 인기를 누리고 있다.여기서 톰캣은 클라이언트의 요청을 해석하여 그에 맞는 자바 프로그램을 실행한 후 그 결과를 응답해주는 웹 애플리케이션 서버를 뜻한다.웹 프레임워크를 사용했을 때의 장점은 쿠키나 세션 처리, 로그인/로그아웃 처리, 권한 처리 등과 같은 여러가지 기능들을 개발자가 일일이 구현할 필요가 없고, 프레임워크에 있는 기능을 익혀서 사용하기만 하면된다.다시 말해, 웹 프레임워크는 웹 프로그램을 만들기 위한 스타터 키트라고..
[개념 정리 1]SpringBoot를 진행하기 전, 몇 가지 개념들을 정리를 해보려한다.먼저 JVM, JRE, JDK에 대한 개념 정리를 해봅시다. [JVM (Java Virtual Machine)]JVM은 자바 가상 머신이라는 뜻으로, 바이너리(바이트) 코드를 읽고 검증 후 실행할 수 있게 만들어준다.다시 말해 자바 프로그램이 어느 기기, 어느 OS에서도 실행될 수 있게 만들어준다.JVM은 자바 프로그램의 메모리를 효율적으로 관리 및 최적화해준다. [JRE (Java Runtime Environment)]JRE은 자바 실행(런타임) 환경이라는 뜻으로, JVM에 자바 프로그램에 필요한 라이브러리 파일을 포함한다.JRE는 JVM의 실행 환경을 구현해주는 역할을 한다.다시 말해 클래스 라이브러리를 통해 작성..
[스트림(Stream)]자바 스트림이란 Java 8부터 추가된 기술로 람다를 활용하여 배열과 컬렉션을 함수형으로 간단하게 처리할 수 있는 기술이다.Stream 이라는 단어의 뜻대로 데이터의 흐름을 의미한다.기존의 for문이나 배열을 사용하면 코드가 길어져서 가독성과 재사용성이 떨이지며, 데이터 타입마다 다른 방식으로 다뤄야하는 불편함이 있다.하지만, 스트림은 데이터 소스를 추상화하고, 데이터를 다루는 데에 자주 사용되는 메서드를 정의해 놓아서 데이터 소스에 상관없이 모두 같은 방식으로 다룰 수 있으므로 코드의 재사용성이 높아진다.스트림을 사용하면 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있다.스트림은 일회용이라는 특징을 가지고있다. [반복문]아래 코드는 일반 for문 버전의 반복문과, Stre..