1주차/ 자바로 구현하는 간단한 ‘할 일 관리 서비스’

전진수·2025년 4월 5일

1. 학습 목표

  1. 할 일 추가(add)
  2. 할 일 리스팅(list)
  3. 할 일 삭제(del)
  4. 할 일 수정(modify)
  5. CRUD를 익히기
  6. Create(add), Read(list), Update(modify), Delete(del)

2. GIT/GITHUB 계정 세팅

GIT: 소스 코드를 관리하는 역할

GIT 다운로드
: 쉘 열기

sudo brew install git 입력

디폴트 브랜치를 master 에서 main 으로 변경

git config --global init.defaultBranch # 현재 설정 확인
git config --global init.defaultBranch main # main 으로 설정

디폴트 사용자 정보 입력

git config --global user.email # GIT 사용자 email 확인
git config --global user.email # 사용자 email 변경
git config --global user.name # GIT 사용자 이름 확인
git config --global user.name "깃허브-USERNAME" # 사용자 이름 변경

붙여넣기 단축기: SHIFT+INSERT

3. 인텔리제이 커뮤니티 세팅

설치 직후 한번만 해도되는 세팅

코딩용 폰트 D2Coding 설치

코드에서 헷갈리기 쉬운 알파벳 오(O)와 숫자 영(0) 등을 확실하게 구분한 폰트
그 외에 개발자가 코드를 읽을 때 가독성을 고려한 폰트

JDK 다운

구UI 와 신UI 중에서 신UI 로 변경

메뉴 => File => Settings => Appearance & Behavior => New UI

Enable New UI : 체크
Compact mode : 체크

소스코드폰트 조정

메뉴 => File => Settings => Editor => Font

Font : D2Coding
Size : 본인 시력에 맞게 조정
소스코드의 폰트

UI테마와 UI폰트 조정

메뉴 => File => Settings => Appearance & Behavior => Appearance

Theme : Dark or Light
Use custom font
체크, D2Coding
Size : 본인 시력에 맞게 조정
이 폰트는 인텔리제이의 UI에 대한 폰트

추후 발생할 수도 있는 한글깨짐문제 해결을 위해서 인코딩 설정

메뉴 => Help => Edit Custom VM Options

아래 코드를 기존내용 하단에 추가

-Dfile.encoding=UTF-8

Keyamp(단축키) 설정(윈도우)

메뉴 => File => Settings => Keymap

Keymap : Eclipse
검색 : Rename
Rename File : Alt + Shift + R
Warning이 뜨면 Keep 버튼 클릭

검색 : Find
Find... : Ctrl + F
Warning이 뜨면 Keep 버튼 클릭

검색 : Replace
Replace... : Alt + Shift + F
다시한번 클릭해서 Ctrl + F 는 제거

클래스 Import 자동화

메뉴 => Settings => => General => Auto Import

Java
Add unambiguous imports on the fly : 체크
Optimize imports on the fly : 체크
프로젝트 생성시마다 수행

전체 소스코드 정리(Reformat Code, Cleanup Code 등)이 특정 폴더에서는 작동 안되도록(스프링부트 용)

추후 스프링부트 프로젝트에서 특정 폴더에 프론트엔드(뷰, 앵귤러, 리액트,스벨트 등) 소스코드를 두는 경우가 있습니다. 보통 폴더이름은 front 라고 합니다. 그때 인텔리제이에서의 전체 소스코드 정리로 인해서 해당 소스코드(front 폴더 하위의 소스코드)들이 영향을 받습니다. 그래서는 안되기 때문에 아래와 같이 설정합니다.

메뉴 => File => Settings => Editor => Code Style 에서 Formatter 탭
Do not format: front/**

메뉴 => File => Settings => Editor => Code Style => Java 에서 Arrangement 탭
Mapping rules: 전부 삭제

디버깅시 볼 필요가 없는 소스코드들을 명시하여 디버깅을 편하게(스프링부트 용)

스프링같은 경우 내부적으로 프록시를 사용할 일이 많습니다. 이 부분이 디버깅시에 불편한점이 많습니다. 아래와 같이 디버깅시에 자동으로 스킵할 부분을 추가할 수 있습니다.

메뉴 => File => Settings => Build, Execution, Deployment => Debugger => Stepping

Do not step into the classess 에 피하고 싶은 경로 추가(패턴으로 추가)
org.springframework.
jakarta.servlet.

org.apache.catalina.*

개발중인 앱이 실행중일때 소스코드를 수정하면 자동으로 빌드가 발생하도록(스프링부트 용)

스프링부트같은 앱을 개발한다면 보통 개발중인 앱이 실행중인 상태에서 앱의 소스코드를 변경할 일이 많습니다. 그때 소스코드를 수정한 것이 실행중인 앱에 자동으로 반영되면 개발이 편해집니다.
아래 설정을 그것을 허용하는 설정입니다.다만 아래 설정만으로 그것이 이뤄지지는 않고 각 상황에 맞는 툴이 필요합니다.(예를들어Spring DevTools)
보통 스프링부트 프로젝트가 아닌 일반적인 자바 프로젝트에서는 필요하지 않은 설정이지만 해당 설정을 켜놔도 상관없습니다.

메뉴 => File => Settings => Advanced Settings
Allow auto-make to start even if developed application is currently running : 체크

매 프로젝트 생성시마다 해야하는 세팅

클래스 Import 자동화

메뉴 => Settings => Editor => General => Auto Import

Java
Add unambiguous imports on the fly : 체크
Optimize imports on the fly : 체크
프로젝트 생성시마다 수행

파일 인코딩 UTF-8로 설정

메뉴 => Settings => Editor => General => File Encodings

Default encoding for properties files : UTF-8
src/main/resources/application.properties 의 확장자를 yml 로 변경(스프링부트 용)
하단에 파일 인코딩이 ISO-8859-1 로 나와 있다면 클릭 후 UTF-8로 변경

내용 변경

server:
port: 8070

JDK 세팅

메뉴 => Project Structure => Project Settings

Project
SDK : graalvm-ce-21
없으면 Download JDK 선택
Language level : SDK default

Modules
Sources , Language level : SDK default

소스코드를 수정하면 자동으로 빌드가 발생하도록(스프링부트 용)

메뉴 => File => Settings => Build, Execution, Deployment => Compiler

Build project automatically : 체크

인텔리제이 내장 그래들로 변경해서 속도향상

메뉴 => File => Settings => Build, Execution, Deployment => Build Tools => Gradle

Build and run using : IntelliJ IDEA
이렇게 하면 인텔리제이의 내장 그래들을 사용하기 때문에 조금 더 빌드가 빨라집니다.

Run tests using : IntelliJ IDEA
이렇게 하면 인텔리제이의 내장 그래들을 사용하기 때문에 조금 더 빌드가 빨라집니다.

Gradle JVM : Project SDK

메뉴 => File => Settings => Build, Execution, Deployment => Compiler => Java Compiler

Additional command line parameters: -parameters


4. 새 자바 프로젝트 세팅

보통 프로젝트 마다 GITHUB 리포지터리가 1개씩 존재합니다.
자바 프로젝트는 보통 인텔리제이를 통해서 만듭니다.

git init: 로컬 리포지터리를 생성합니다.

보통 프로젝트 폴더에서 수행합니다. 특정 프로젝트를 특정 리포지터리와 연결하려면 git remote add origin 리포지터리주소 와 같은 명령어를 수행합니다. 여기서 origin 은 여러분의 취향에 따라 다른 단어로 바꿔도 되지만, 관례적으로 origin 을 사용합니다.

git add . : 변경/생성된 소스코드를 중간영역(index)에 추가합니다.

git commit -m "메세지" : index 에 추가된 소스코드를 로컬 리포지터리에 저장합니다.

메세지는 나중에 해당 커밋이 무엇에 관련된 작업이었는지 파악할 때 사용됩니다.

git push origin main : 현재 로컬 리포지터리와 연결된 외부 리포지터리 중에서 origin 으로 커밋들을 업로드 합니다.

5. 스캐너로 명령 입력받기

System.in 은 표준 입력 스트림 입니다. (키보드)
System.out 은 표준 출력 스트림 입니다. (모니터)
Scanner scanner = new Scanner(System.in); : 키보드를 스캔하는 스캐너 객체 생성
System.out.println("안녕"); : "안녕" 을 모니터에 출력

Scanner 클래스는 Closable 한 객체이기 때문에 try 안쪽에 선언하면 명시적으로 scanner.close(); 를 하지 않아도 됩니다.

ctrl + 1 누른 후 엔터 누르면 클래스가 생성됨

Main.java

package com.ll;

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

App.java

package com.ll;

import java.util.Scanner;

public class App {
    public void run() {
        System.out.println("할일 관리 앱, 시작");

        try(Scanner scanner = new Scanner(System.in)){
            System.out.print("명령) ");
            String cmd = scanner.nextLine().trim();

            System.out.printf("입력한 명령: %s\n", cmd);
        }

        System.out.println("할일 관리 앱, 끝");
    }
}

scanner.nextLine() 이 실행되면 프로그램은 사용자가 엔터를 입력하기 전까지 멈춘다.
trim(): 공백제거

6. exit/add 명령 구현

App.java

package com.ll;

import java.util.Scanner;

public class App {
    public void run() {
        System.out.println("할일 관리 앱, 시작");

        try(Scanner scanner = new Scanner(System.in)){
            while( true ) {
                System.out.print("명령) ");
                String cmd = scanner.nextLine().trim();

                if (cmd.equals("exit")) break;
                else if (cmd.equals("add")){
                    long id = 1;
                    System.out.print("할일 : ");
                    String content = scanner.nextLine().trim();
                    System.out.printf("%d번 할일이 생성되었습니다\n", id);
                }

                System.out.printf("입력한 명령: %s\n", cmd);
            }
        }

        System.out.println("할일 관리 앱, 끝");
    }
}

7. Todo 객체에 입력받은 내용 채우기

할 일
번호(ID), 내용(CONTENT) 묶어서 관리하는게 좋다. -> heap

ALT+INSERT 눌러서 GETTER와 SETTER 등록 (CONSTRUCTER도 가능)

Todo.java

package com.ll;

public class Todo {

    private String content;
    private long id;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
    
    public Todo(long id, String content) {
        this.id = id;
        this.content = content;
    }
}

App.java

package com.ll;

import java.util.Scanner;

public class App {
    public void run() {
        System.out.println("할일 관리 앱, 시작");

        try(Scanner scanner = new Scanner(System.in)){
            while( true ) {
                System.out.print("명령) ");
                String cmd = scanner.nextLine().trim();

                if (cmd.equals("exit")) break;
                else if (cmd.equals("add")){
                    long id = 1;
                    System.out.print("할일 : ");
                    String content = scanner.nextLine().trim();

                    Todo todo = new Todo(id, content);

                    System.out.printf("%d번 할일이 생성되었습니다\n", id);
                }

                System.out.printf("입력한 명령: %s\n", cmd);
            }
        }

        System.out.println("할일 관리 앱, 끝");
    }
}

0개의 댓글