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
코딩용 폰트 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


보통 프로젝트 마다 GITHUB 리포지터리가 1개씩 존재합니다.
자바 프로젝트는 보통 인텔리제이를 통해서 만듭니다.
git init: 로컬 리포지터리를 생성합니다.
보통 프로젝트 폴더에서 수행합니다. 특정 프로젝트를 특정 리포지터리와 연결하려면 git remote add origin 리포지터리주소 와 같은 명령어를 수행합니다. 여기서 origin 은 여러분의 취향에 따라 다른 단어로 바꿔도 되지만, 관례적으로 origin 을 사용합니다.
git add . : 변경/생성된 소스코드를 중간영역(index)에 추가합니다.
git commit -m "메세지" : index 에 추가된 소스코드를 로컬 리포지터리에 저장합니다.
메세지는 나중에 해당 커밋이 무엇에 관련된 작업이었는지 파악할 때 사용됩니다.
git push origin main : 현재 로컬 리포지터리와 연결된 외부 리포지터리 중에서 origin 으로 커밋들을 업로드 합니다.

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(): 공백제거
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("할일 관리 앱, 끝");
}
}
할 일
번호(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("할일 관리 앱, 끝");
}
}