이제 뭘해야하지?지난 글에서 BoardWriteCommand 를 구현했고 그걸 통해서 사용자가 입력한 데이터를 BoardDto에 담는것까지는 성공했다.그럼 이제 DTO를 전달받아 실제 DB에 쿼리를 수행할 DAO 메서드를 구현할 차례다 어떻게 구현해야할까?BoardDao 클래스에 insertBoard 메서드를 추가할것이다정보를 DB에 넣어주니 insert가 맞는거 같아 insertBoard라고 작명했다 //게시글 등록을 위한 메서드 public void insertBoard(BoardDto dto) { Connection conn = null; PreparedStatement pstmt = null; //실행할 쿼리문 - 데이터가 들어갈 자리는 ?로 비워둔다 String sql =..
지난 글에서 커맨드 객체가 지켜야 할 공통 규격인 BoardCommand 인터페이스를 정의했다.규격을 만들었으니 이제 상속을 받아 비즈니스 로직을 수행할 첫번째 구현체, BoardWriteCommand 클래스를 작성해보자쉽게말해 글쓰기 주문서를 작성할 차례다 그래서 BoardWriteCommand 클래스는 무슨 일을 하는데?사용자가 작성한 게시글 정보를 서블릿의 request 객체로부터 추출해서 DTO에 담고, DAO에게 전달하는 중간 다리 역할을 한다 com.study.command 패키지에 BoardWriteCommand 클래스를 생성하고 만들어둔 인터페이스를 implements 해주자 public class BoardWriteCommand implements BoardCommand { @Overr..
그래서 이제 진짜 글 쓸수 있나?아직 멀었다 이번에는 커맨드 패턴으로 인터페이스를 작성해보자 그냥 기능마다 서블릿을 하나씩 만들어서 처리하면 안되나?만약 글쓰기,목록보기,글수정,글삭제 등 기능이 추가될 때마다 서블릿을 새로 만든다면 서블릿 파일이 수십 수백개로 늘어날 것이고 결국 유지보수와 URL 매핑이 불가능에 가까워질 정도로 많아질것이다. 그럼 그걸 어떻게 해결할건데?이 문제를 해결하기 위해 프론트 컨트롤러 패턴과 커맨드 패턴을 도입한다.사용자의 모든 요청을 하나의 대표 서블릿인 프론트 컨트롤러가 전부 다 받는다 그 후 요청의 종류를 분석한 뒤, 실제 비즈니스 로직을 수행할 알맞은 명령 객체에게 처리를 위임하는 구조라고 한다. 명령 객체는 어떻게 만드는데?프론트 컨트롤러가 여러 종류의 명령 객체들을 ..
데이터 바구니(DTO)까지 만들었다! 그럼 이제 진짜 글을 쓰면 되나?아직이다ㅋㅋ 바구니의 재료로 요리를 만들려면 요리사가 필요하다그게 바로 이번 파트의 DAO(Data Access Object)다 DAO가 뭐고 정확히 무슨일을 하는데?앞선 파트의 DTO를 서블릿에게 넘겨받아 그 안에 든 데이터를 꺼내 SQL 쿼리문을 작성하고 DB에 넣어주는 역할을 한다.게시판의 핵심 데이터 처리는 모두 이 DAO의 손을 거쳐야한다 그럼 바로 클래스로 DAO 뽑으면 되나?그런데 여기서 중요한 규칙이 있는데, 단 하나의 DAO만 생성한다는것이다만약 사용자가 글을 작성할 때마다, 목록을 볼때마다 매번 new 키워드로 새로운 DAO를 생성하면 메모리가 폭발하고 말것이다. 그럼 어떻게할건데?프로그램이 시작될 때, 최초 단 하나..
앞서 JDBC로 Java와 DB간의 연결통로를 이어줬다그럼 DB연결도 끝났고, 이제 진짜 글을 쓰면 되는걸까?..라기에는 하나 더 생각해봐야할게 있다. 사용자가 화면에서 데이터를 입력(ex: 제목이라던지)하고 등록을 하면,그 데이터는 DB까지 어떻게 가지고 가야할까?그냥 변수 N개 만들어서 던져주면 안되나?? 라고 하면 안될건 없다 다만 코드가 파라미터를 낱개로 던져주면 코드가 굉장히 지저분해질 것이다. 게다가 입력 항목이 늘어날수록 메서드 괄호 안이 늘어나는 참사가 일어날 것이다 그래서 어쩌라는거지?이 데이터들을 포장해서 담아 나를 바구니가 필요하다.그게 바로 DTO(Data Transfer Object) 라고 부른다. 해석하면 데이터 전송 객체라는것이다 그럼 바구니 즉 DTO라는걸 어떻게 만들어야 할..
앞서 DB 테이블도 만들었으니 이제 Java에서 쿼리문을 날리면 끝이날까?정답은 No. 다 Java와 MySQL DB는 서로 쓰는 언어도, 동작하는 공간도 다르기 때문에 둘을 이어주어야 한다 그래서 어떻게 연결하는데?쉽게 말해 JDBC라는 통역사를 고용한다. 그래서 JDBC가 뭐하는 녀석인데?정식 명칭은 Java Database Connectivity 이름 그대로 Java와 DB를 연결해주는 자바의 규칙이다. 매번 작성할 때마다 통역사를 부르는건 비효율적이니, DB 연결만 전담하는 클래스를 만들어 뒀다.public class ConnectionTest { //1. DB 주소와 접속 static final String DB_URL = "jdbc:mysql://localhost:3308/ebrai..
이제 직접 데이터를 띄울 DB를 연결해보자이번 게시판 만들기 프로젝트에서는 MySQL을 사용한다 DB는 mysql db를 docker로 간편하게 띄우고 연결했다 쿼리짜는건 erd로 대체 후에 export 했다 쿼리를 실행하면 AUTO_INCREMENT 때문에 에러가 발생하는데,(Incorrect table definition; there can be only one auto column and it must be defined as a key)ALTER TABLE `Board` ADD CONSTRAINT `PK_BOARD` PRIMARY KEY (`id`); 문제로MySQL은 테이블 생성 시에 PK가 누구인지 확실하게 알고 싶어하는거 같다. 변경 후 쿼리를 실행해주면 db에 잘 들어가는 모습을..
반갑습니다형편없는 글 솜씨와 개발 실력으로는 무언가를 만들어낸다는건 쉬운 일이 아닙니다그래도 일단 해봅시다 내가 만들 게시판은 어떤식으로 만들어야할까?라는 질문에 들어가기에 앞서 MVC 패턴이라는 녀석을 알아야한다 그래서 그게 뭔데?디자인 패턴 쉽게 말해 정형화된 구조라고 할 수 있다.지금은 그게 중요한게 아니니까 넘어가자 MVC는 또 뭔데?하나의 어플리케이션을 구성할 때, 세가지 요소로 역할을 구분한 패턴이라고 할 수 있다.각각 Model, View, Controller로 Model은 '상태' 와 '데이터'를, View는 '출력'을, Controller는 '중재'를 담당한다. 여기서 또 MVC 모델1 과 MVC 모델2로 나뉘는데이것도 쉽게 말해서 모델1은 화면(View) 안에 데이터 처리 로직(Mode..
TCP/IP 4계층 모델과 OSI 7계층 모델에 대해 각각 설명하고, 두 모델을 비교해보세요. OSI 7계층 모델ISO(국제표준화기구)에서 만든 개념적인 네트워크 표준 모델 통신 과정을 아주 세밀하게 7단계로 나누어 설명 계층명칭데이터 단위주요 역할 및 특징대표 프로토콜L7응용 (Application)Data사용자 인터페이스, 네트워크 서비스 제공HTTP, FTP, SMTPL6표현 (Presentation)Data데이터 형식 변환, 암호화, 압축SSL/TLS, JPEG, MPEGL5세션 (Session)Data통신 세션 유지 및 관리SSH, RPCL4전송 (Transport)Segment종단 간 신뢰성 있는 전송, 흐름 제어TCP, UDPL3네트워크 (Network)Packet목적지 주소(IP) 경로 ..
Spring Cache에서 @Cacheable, @CachePut, @CacheEvict의 차이점과 각각을 어떤 상황에서 사용하는 것이 적절한지 설명해주세요. 캐시(Cache)는 한 번 처리한 데이터를 임시 저장소(메모리)에 저장해두었다가, 똑같은 요청이 오면 복잡한 과정을 거치지 않고 즉시 내어주는 기술. Spring Cache는 선언적 캐시 관리를 위한 여러 애노테이션을 제공. 각 애노테이션은 서로 다른 캐시 동작을 담당하며, 적절한 상황에서 사용해야 함. @Cacheable : 가장 많이 쓰이는 데이터 조회용 어노테이션동작 방식캐시 확인: 메서드를 호출하기 전, 지정된 캐시 저장소에 동일한 Key값이 있는지 확인Cache Hit: 값이 있다면 메서드를 실행하지 않고 저장된 값을 즉시 반환Cach..
