dev-course day14

2rlokr·2025년 3월 21일

dev-course

목록 보기
14/43
post-thumbnail

오늘 배운 것

과제 실습

기본 문법

Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine(); //Enter 를 입력할 때까지 입력으로 보겠다 !
String str2 = sc.nextLine().trim(); // Enter 이전에 담긴 공백문자를 다듬는 것

private LocalDate createdAt; // 날짜를 표현할 수 있는 자료형
createdAt = LocalDate.now(); // 현재 날짜를 가져올 수 있는 함수

// TODO : PostService를 통해 Post 저장하기 
// 다음과 같이 IntelliJ가 인식할 수 있는 TODO 주석도 있다 ! 

catch (Exception e) {
	System.out.println("알 수 없는 오류가 발생했습니다!");
	e.printStackTrace(); // 예외 메세지가 찍힌다.
}

Main 함수

보통 Main에서는 다른 코드를 넣어주지 않는다고 한다.

public static void main(String[] args) {
    Application app = new Application();
	app.run();
}

다음과 같이 어플리케이션을 실행시키는 코드만 넣는다.

문제 상황 기록

/*
    # 문제 리스트
    3. 게시글 한 개 밖에 못 씀.
    --
    1. 게시글 작성하지 않고 조회하면 -> NPE
    2. 숫자 아닌 거 입력하면 조회시 오류 발생 -> NumberFormatException
    4. 인덱스 범위 벗어나는 게시글 찾을 때 -> NPE
*/

개발 중 생기는 문제 상황, 에러, 요구사항 등을 만족하기 위해서 다음과 같이 주석으로 기록해둘 수 있다. 기록해두면 이후 readme에 활용하기도 좋고, 어떤 문제상황이 있는지 눈으로 확인하기 좋다.


MVC 패턴

MVC(Model-View-Controller)는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는 데에 널리 사용되는 소프트웨어 디자인 패턴이다. 소프트웨어의 비즈니스 로직과 화면을 구분하는 데에 중점을 두고 있다.

  • 소프트웨어를 Model, View, Controller 라는 3가지 구성 요소로 구분한 개발 방법론
  • 컴포넌트의 변경이 다른 컴포넌트에 영향을 미치지 않아 유지보수가 용이하며, 컴포넌트 간의 결합성이 낮아 프로그램 수정이 용이해 확장성이 뛰어나다.

사용자가 Controller를 사용하면 Controller는 Model에게서 데이터를 받아오고, 그 데이터를 View에서 시각적인 부분을 제어하여 사용자에게 전달한다.

  1. 사용자의 Request(요청)를 Controller가 받는다.
  2. ControllerService에서 비즈니스 로직을 처리한 후 결과를 Model에 담는다.
  3. Model에 저장된 결과를 바탕으로 시각적 요소 출력을 담당하는 View를 제어하여 사용자에게 전달한다.

Model (모델)

소프트웨어나 어플리케이션에서 정보 및 데이터 부분을 의미한다. 이는 Controller에게 받은 데이터를 조작(가공)하는 역할을 수행한다고 볼 수 있다. 즉, 데이터와 관련된 부분을 담당하며 값과 기능을 가지는 객체

  • 어플리케이션 상태의 캡슐화
  • 상태 쿼리에 대한 응답
  • 어플리케이션의 기능 표현 -> 이게 무슨 말인지 잘 모르겠음.
  • 변경을 View에게 통지 (변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 한다.)

View (뷰)

입력값이나 체크박스 등과 같은 사용자 인터페이스 요소를 나타낸다. 이는 Controller에게 받은 Model의 데이터를 사용자에게 시각적으로 보여주기 위한 역할을 수행한다. 사용자에게 보여지는 화면이라고 볼 수 있다.

  • 모델을 화면에 시각적으로 표현
  • 모델에게 업데이트 요청
  • 사용자의 입력을 컨트롤러에 전달
  • 컨트롤러가 View를 선택하도록 허용

Controller (컨트롤러)

Controller는 Model과 View 사이에서 데이터 흐름을 제어한다. 사용자가 접근한 URL에 따라 요청을 파악하고 URL에 적절한 Method를 호출하여 Service에서 비즈니스 로직을 처리한다. 이 후 결과를 Model에 저장하여 View에게 전달하는 역할을 수행한다. 결국 Controller는 Model과 View의 역할을 분리하는 중요한 요소이다.

  • 어플리케이션의 행위 정의
  • 사용자 액션을 Model에 업데이트와 Mapping
  • 응답에 대한 View 선택

isBlank(), isEmpty(), isNull() 차이점

isBlank()

문자열이 비어있거나, 빈 공백으로만 이루어져 있으면, TRUE를 리턴한다.

isEmpty()

문자열의 길이가 0인 경우에, TRUE를 리턴한다.

isNull()

문자열이 NULL이면 TRUE를 리턴한다.

값(value)isBlank()isEmpty()isNull()
" "truefalsefalse
""truetruefalse
nulltruetruetrue
"abc"falsefalsefalse

레이어드 아키텍처 패턴 (Spring Layered Architecture Pattern)

MVC 모델에 맞게 개발하다보니 Controller, Service, Repository 이렇게 나누어 개발을 하게 되었다. 이것이 무엇인지, 각자 하는 기능이 무엇인지 알기 위해 알아보았다.

Spring을 이용하여 개발하면 자연스럽게 Controller, Service, Repository 계층으로 나누어 개발하게 되는데, 이렇게 계층으로 나누어 개발하는 패턴을 레이어드 아키텍처 패턴이라 한다. 레이어드 아키텍처 패턴이란 코드를 분리하여 관리하는 방법이다. 구체적으로 얘기하자면 어플리케이션의 구성 요소들을 프레젠테이션, 비즈니스, 퍼시스턴스, 데이터베이스로 나눠서 관리한다.

Controller

사용자의 요청에 대한 내용을 받아서 문제가 있는지, 유효성 검사를 해준다. 또한, 변화가 있으면 View에 전달한다.

Service

데이터를 가공하는 등의 비즈니스 핵심 로직을 수행한다. 어플리케이션의 핵심적인 기능을 수행한다. 이를 다시 컨트롤러에게 반환하는 역할을 수행한다.

Repository

저장소 느낌. 서비스가 비즈니스 로직을 수행할 때 필요한 데이터를 생성, 수정, 조회 (CRUD) 등을 처리하여 실제로 데이터베이스에 데이터를 저장, 수정, 조회하는 역할을 수행한다.


느낀점

오늘은 과제를 함께 구현해보았다. 솔직히 나는 과제를 시작도 안 했다. ㅎ.. 게을러서가 아니라.. 이 쓸데없는 게으른 완벽주의가 발동해서 딱 각 잡고 하려다가 이렇게 되었다. 이번주 토요일에 할 계획이었는데,, 강사님 말처럼 하루에 한 시간이라도 투자할 걸.. 싶었다. 다음부턴 그러지 말자 !

솔직히 MVC 패턴을 넣기 시작할 때부터 와 이게 지금 뭐하는 거지.. 어떤 기준으로 나누는 거지.. 싶었는데, 정말 신기하게도 Post 구현을 마치니까 자연스레 머리에 정리가 되었다. 또, 강사님이 시원하게 정의내려준 각각의 역할도 들으니 더 이해가 잘 됐던 것 같다. Post 구현 중만 해도, 강사님이 "이게 MVC 넣고 있는 거다~" 라고 말씀하실 때, '와, 진짜 쉽지 않네 ㅠ..' 싶었는데 Board 구현할 때는 정말 머리에서 정리가 되어서 미리 코드를 짜고 강사님 코드와 비교하면서 볼 수 있었다 !!

실제 프로젝트를 구현하면 당연히!! 이것보다 어려울 것이고, 지금은 Post 와 유사하게 구현하면 됐어서 비교적 쉽게(?) 구현했을지 몰라도,, 달라지면 또 머리가 복잡하겠지 .. 그치만 난 이 각각의 계층이 하는 기능, 역할을 이해한 것으로도 박수 박수 10번이다 !

다행히 과제를 끝까지 같이하진 않았다. 그래서 주말동안 지금까지 한 부분은 다시 스스로 구현해보고, 추가 요구사항을 구현해볼 예정이다 ! 제발 혼자해도 잘 되길.. ㅋ

그리고 오늘은 HAPPY FRIDAY 다 !!!! 앗싸.. ㅎ 어제 야식 이슈로 너무 소화가 안돼서 점심을 거르고 지금까지 공복이다 ㅎ 이젠 배가 좀 고프네 ? ㅎ.. 근데 오늘 저녁에 삼겹살 먹기로 했기 때문에 두근두근 기대하면서 참는 중이다 :) 이번 한 주도 수고했고, 다음주도 파이팅해보자 !!!! 아자자 !!!!!!!

0개의 댓글