분류 전체보기 132

6. JPA란 무엇일까?

DB를 직접 다룰 때의 문제점애플리케이션에서 아래 형태의 객체 데이터를 DB에 저장해서 관리해야한다면 어떻게 해야 할까? public class Memo { private Long id; private String username; private String contents;}1. DB 테이블 만들기create table memo ( id bigint not null auto_increment, contents varchar(500) not null, username varchar(255) not null, primary key (id));2. 애플리케이션에서 SQL 작성String sql = "INSERT INTO memo (usernam..

1. Bean을 수동으로 등록하는 방법

New Project를 생성한다.3가지를 Add 해준다. Create Git을 했으니 생성한 프로젝트를 모두 최초의 커밋을 해준다.오른쪽에 코끼리모양 Gradle 버튼을 누르고 사진을 따라간다.그럼 build.gradle로 진입한다.그리고 이 코드를 작성하고 코끼리 새로고침을 눌러 적용시킨다.SpringAuthApplication으로 이동이렇게 작성한다. Spring Security의 일부 기능들을 제외시킨것이다. 학습할 때 방해가 되기 때문이다. 이후에 Spring Security를 배울때 다시 제외한걸 돌려놓을것이다.Bean 수동 등록이란?@Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록해준다. 일반적으로 @Component를 사용하여 ..

5. IoC Container와 Bean

이전 강의를 통해 DI를 사용했을 때의 장점을 살펴 보았다. 그런데 DI를 사용하기 위해서는 객체 생성이 우선되어야 한다. 그렇다면 언제 어디서 누가 객체를 생성해야 할까? 바로 Spring 프레임워크가 필요한 객체를 생성하고 관리하는 역할을 대신 해준다. 빈(Bean) : Spring이 관리하는 객체 Spring IoC 컨테이너 : Bean을 모아둔 컨테이너 Bean으로 주입받고 있는 생성자나 메서드는 왼쪽에 커피콩 아이콘이 보인다.JdbcTemplate 객체MemoRepositroy의 생성자로 JdbcTemplate를 받는데, 이는 기본적으로 Spring에서 자동으로 주입해주는 Bean이다. 왼쪽에 커피콩 아이콘이 보이는것으로 확인할 수 있다.이전 강의에서 오류발생 부분, bean이 없다고 말한다. ..

4. 메모장 프로젝트의 IoC & DI

객체 중복 생성 문제 해결Memo Service를 보면 "new MemoRepository(jdbcTemplate);" 코드가 중복되는게 보인다.public class MemoService { private final JdbcTemplate jdbcTemplate; public MemoService(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public MemoResponseDto createMemo(MemoRequestDto requestDto) { // DB 저장 MemoRepository memoRepository = new MemoRepository(jdbcTempl..

3. IoC(제어의 역전), DI(의존성 주입) 이해하기

Spring의 IoC와 DIIoC, DI는 객체지향의 SOLID 원칙 그리고 GoF의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴이다. 이 둘을 더 자세하기 구분해 보자면 IoC는 설계 원칙에 해당하고 DI는 디자인 패턴에 해당한다. 요리로 비유해보면설계 원칙을 요리로 비유하기 신선한 재료를 사용한다. 신 김치를 사용한다. 밥과 김치의 비율을 잘 맞춰야 한다. 볶을 때 재료의 순서가 중요하다.디자인 패턴을 요리로 비유하기 오일을 두른 팬에 채썬 파를 볶아 파기름을 만든다. 준비한 햄을 넣고 볶다가, 간장 한스푼을 넣어 풍미를 낸다. 설탕에 버무린 김치를 넣고 함께 볶는다. 미리 식혀 둔 밥을 넣어 함께 볶는다. 참기름 한스푼을 넣어 마무리한다.좋은 코드란 무엇일까?논리가 간단해야 한다. 중복을 제거하고..

2024-08-19

answer.setCharAt(i,answer.charAt(i)-32);  answer.charAt(i)-32는 문자열 하나를 대문자로 바꾸기 위한 코드이다. 하지만 이 부분은 int형을 반환하므로 char 형태로 바꿔줘야 한다. answer.setCharAt(i,(char)(answer.charAt(i)-32));Spring에서 DataBase 연결에서 발생한 오류데이터베이스 연결이 안되어서 (비밀번호가 잘못입력되어서) 오류가 발생오류 메시지 가장 마지막에 중요한 정보가 있었다. 오류메시지는 끝까지 보는게 좋겠다.

오늘의 오류 2024.08.19

2. 역할 분리하기

Memo 프로젝트에 다시 들어가서 com.sparta.memo 안에  service 패키지를 만든다. 그 패키지 안에 Memoservice class를 만든다. MemoController 클래스로 이동 -> createMemo 메서드로 이동메서드 내용에 해당 코드를 추가한다. 그 후 Memoservice클래스의 createMemo 메서드를 만들기 위해 다시 Memoservice 클래스로 이동하고 아래처럼 메서드를 만들어준다. Controller의 반환 타입이 MemoResponseDto이고 그 return 값으로 service의 createMemo의 메서드 반환값을 반환하니 service 부분의 createMemo 메서드도 MemoResponseDto를 반환해줘야 한다. 그리고 기존의 Controller..

1. 3 Layer Architecture

메모장 프로젝트의 문제점현재 우리가 작성한 메모장 프로젝트는 Controller 클래스 하나로 모든 API를 처리하고 있다. 현재는 API 수가 적고 기능이 단순하여 코드가 복잡해 보이지 않을 수 있지만 앞으로 기능이 추가되고 복잡해진다면 문제가 발생할 수 있다. 한 개의 클래스에 너무 많은 양의 코드가 존재하기 때문에 코드를 이해하기 어렵다. 현업에서는 코드의 추가 혹은 변경 요청이 계속 생길 수 있다. 문제가 발생했는데 해당 Controller 클래스를 구현한 개발자가 퇴사한다면? 3 Layer Architecture이러한 문제점들을 해결하기 위해 서버 개발자들은 서버에서의 처리과정이 대부분 비슷하다는 걸 깨닫고, 처리 과정을 크게 Controller, Service, Repository 3개로 분리..

20. JDBC란 무엇일까

JDBC의 등장배경 애플리케이션 서버에서 DB에 접근하기 위해서는 여러가지 작업이 필요하다. 1. 우선 DB에 연결하기 위해 커넥션을 연결해야 한다. 2. SQL을 작성한 후 커넥션을 통해 SQL을 요청한다. 3. 요청한 SQL에 대한 결과를 응답받는다.기존에 사용하던 MySQL 서버를 PostgreSQL 서버로 변경한다면 무슨일이 발생할까? MySQL과 PostgreSQL은 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답받는 방법 모두 다를 수 있다. 따라서 애플리케이션 서버에서 작성했던 DB 연결 로직들을 전부 수정해야 한다.이러한 문제를 해결하기위해 JDBC 표준 인터페이스가 등장했다. JDBC는 Java Database Connectivity로 DB에 접근할 수 있도록 Java에서 ..