9/1
인프라 & 보안 공부 기록
인프라 개념 정리
- 서버 : 정보를 제공하는 집
- 네트워크 : 도로 같은 개념
- 데이터베이스(DB) : 창고/저장소
- 클라우드 : 서버 공간을 빌려 쓰는 것
네트워크 7계층 (OSI 7 Layer)
- 물리 계층 : 실제 케이블, 전송 매체
- 데이터링크 계층 (L2) : 스위치, MAC 주소 기반 통신 (기기 고유 번호)
- 네트워크 계층 (L3) : IP 주소 기반 통신
- MAC → 같은 네트워크끼리만 가능
- IP → 다른 네트워크끼리 통신 가능
- 전송 계층 : TCP/UDP (신뢰성 vs 속도)
- 세션 계층 : 세션 관리
- 표현 계층 : 데이터 표현 방식
- 응용 계층 : 실제 애플리케이션 서비스
인프라의 중요한 특성
- 확장성 – 사람이 몰리면 서버 늘려야 함
- 안정성 – 24시간 서비스 유지
- 모니터링 – 문제가 생겼을 때 빨리 알 수 있어야 함
보안 기본 개념
- 방화벽 : 외부에서 들어오는 불필요한 트래픽 차단
- VPN : 안전한 통신로
- IDS/IPS : 침입 감지 및 차단 (CCTV + 경비원 느낌)
웹 개발과 연결 지어 생각하면:
- HTTPS 인증서 관리 – 서버에 SSL 적용
- 로그인 관리 – 세션/토큰 (JWT 등)
Spring Boot 간단하게
= 웹 서버(아파치, 톰캣) + 클라우드 환경(AWS) + 프레임워크가 합쳐진 느낌.
→ 결국 웹 서버를 쉽게 개발할 수 있게 도와주는 툴킷 같은 것.
기술 면접 대비
- HTTP Method 차이
- GET : 조회
- POST : 생성
- PUT : 전체 수정
- DELETE : 삭제
- HTTP 상태 코드
- 200 : 성공
- 400 : 잘못된 요청
- 404 : 리소스 없음
- 500 : 서버 내부 오류
- 프로세스 vs 스레드
- 프로세스 : 실행 중인 프로그램
- 스레드 : 프로세스 안에서 실행되는 작은 작업 단위
- RDB vs NoSQL
- RDB : 테이블 기반, 스키마 고정, SQL 사용, 트랜잭션 보장
- NoSQL : 자유로운 구조, 확장성 유리
- DB 인덱스
- 장점 : 검색/조회 성능 향상
- 단점 : 인덱스 관리 비용 발생
- SOLID 원칙 – 스프링 부트 개발 시 기본적으로 지켜야 하는 원칙
코딩테스트 대비 - 자주 나오는 유형들
- DFS, BFS
- 구현 (수학, 문자열)
- DP
- 이분 탐색
- 그래프 탐색
프로그래머스 문제 예시
지폐 접기
모의고사 (완전탐색)
타겟 넘버 (DFS)
다리를 건너는 트럭 (큐, DFS)
게임 맵 최단거리 (BFS)
앞으로 할 일
여러 기업에 원서 넣어보기
포트폴리오 만들어보기
단지서버 서비스 완성
코딩테스트 계속 연습하기 (특히 DFS, BFS, DP, 이분탐색, 스택/큐/덱 문제들)
9/2
9시
전반적인 교육 흐름
- 백엔드와 프론트엔드의 개념
- 전체 교육 과정의 방향 설명
10시
JDK와 PLC 제어
- LTS 버전 JDK 사용 (장기 지원, 유지보수 및 업데이트 제공)
- 비주얼 베이직 기반의 PLC 제어 사례도 존재
11시
JDK와 이클립스
- JDK: JVM을 통해 운영체제(윈도우, 리눅스, 맥OS)에 맞춰 실행
- 이클립스 (2023-12 버전): 엔터프라이즈 환경 → 웹, DB 연동 기본
- 인텔리제이는 나중에 사용 예정
자바 실행 과정
- 소스파일 작성 →
.java 확장자
- 컴파일 (
javac) → .class 바이트코드 생성
- JVM 실행 (
java 파일명)
참고
servlet: 웹에서 쓰이지만 직접 활용 빈도는 낮음
12시
JDK 설치 및 환경 변수 설정
JAVA_HOME → JDK 경로 설정
PATH → bin 폴더 경로 추가
버전 변경 방법
- 고급 시스템 설정 →
JAVA_HOME 값 변경
PATH 값 수정 및 순서 이동
메모장 실습
HelloWorld.java 작성
- CMD에서
javac HelloWorld.java
java HelloWorld 실행
결론: 실제 개발에서는 IDE(이클립스, 인텔리제이) 사용이 훨씬 편리하다.
2시
IDE와 프로젝트 관리
- 이클립스 특징
- 워크스페이스 기반 관리
Data Source Explorer: DB 연결
Perspective: 뷰 관리 (Java EE 기본값)
Window → Show View로 뷰 복구 가능
- 프로젝트 생성
- 예시 이름:
basicJava (낙타 표기법)
.classpath 등 설정 파일은 삭제/수정 금지 (Git에도 함께 관리)
- 패키지로 폴더 구분 (정리 목적)
실행 관련
psvm (public static void main) → 자바 시작점
- 인터프리터가
main 메서드를 찾아 한 줄씩 실행
실습 문제
- 실습 int time = 8888; //주어진 데이터는 초 데이터로 생각하고 작업을 선언하고 시간 분 초로 변경해서 출력
package chap02;
public class SecondProgram {
public static void main(String[] args) {
int time = 8888; //주어진 데이터는 초 데이터로 생각하고 작업을 선언하고 시간 분 초로 변경해서 출력
int s = time % 60;
int m = (time / 60) % 60;
int h = (time / 60 / 60) % 24;
System.out.println(h + "시간" + m + "분" + s + "초");
}
}
9시
기본형과 참조형 복습 / 변수
- 기본형 (Primitive) : 실제 값을 저장, 스택에 저장
- 정수(byte, short, int, long), 실수(float, double), 논리(boolean), 문자(char)
- 참조형 (Reference) : 객체의 주소를 저장, 힙에 저장
배열, 클래스, 인터페이스, 열거형, String
차이점
기본형 → 실제 값을 바로 계산에 사용 가능
참조형 → 주소값 저장, . 또는 [] 접근 필요
String은 클래스지만 기본형처럼 대입 가능
참고
Applet → 거의 사용하지 않음 (느리고 시대에 맞지 않음)
10시
연산자
11시
12시
조건문 (if ~ else if)
- if - else if에서는 조건식의 대상 변수가 동일해야 함
- 조건 중복이 없도록 설정해야 함
2시
- 조건문 & Switch
- if문
- 조건 중복 주의
- 중첩 가능 (3~4단계까지만 권장, 가독성 문제)
switch문
- 비교 연산자 사용 불가
- 정수, 문자열, 식, 변수, 메서드 호출 값과 정확히 일치해야 실행됨
- if문을 switch로 변환할 때 값 범위를 적절히 나눠야 함 (num / 10 활용)
3시
Switch문 실습
- if → switch 변환 예제 시도 (실패 → num/10으로 해결 가능했음)
4시
반복문 & 디버깅
- 반복문
- for, while, do-while 학습
- DB 데이터 조회, 센서 데이터 처리 등에 활용
디버그 모드
- 중단점 (breakpoint) 설정
- Step Into: 메서드 내부까지 추적
- Step Over: 현재 코드만 실행
9/4
반복문, OOP 기초, API 사용
9시
- 어제 복습 & 이중 for문
- 오늘 : 이중 for문 예제
- \t → 들여쓰기(tab) 제공 → 출력 형식을 깔끔하게 정리할 때 사용
10시
- 제어 구문 & 지역 변수
- 이중 for문으로 구구단 2개 출력
- 공부할 주제: 제어구문, 자료구조, IO(BufferedReader 등), 문제 풀이 30~40개
- 지역 변수 (Local Variable)
- {} 블록 내부에서 선언 (단, 클래스 선언 블록 제외)
- 사용 전에 반드시 초기화 필요
- 선언된 블록 안에서만 유효
- break / continue
- break → 반복문 종료
- continue → 반복문 한 사이클 건너뜀 (skip)
11시
- while & do-while
- while문
- 조건식이 true인 동안 반복 실행
- 조건식에는 boolean 반환 메서드 or 비교연산자 활용
- 예제: 문자열 10개 출력하기
- 활용: 라즈베리파이에서 카메라를 계속 돌리는 작업 등
- do-while문
12시
- 객체지향 개념 & 자바 패키지
- OOP (객체지향 프로그래밍)
- SOLID 원칙
- 객체지향 설계 원칙 (스프링/프로젝트 단계에서 적용 예정)
- 클래스 구성요소
- 주요 패키지
- java.net → 네트워크 통신
- java.io → 입출력 (BufferedReader 등, 성능 향상 / 상속 관계 포함)
- java.db → 데이터베이스 관련
2시
- API 사용법
- 공식 문서: Java 8 API 문서
- 메서드 예시
- codePointBefore(int index) → int 타입 반환
- void → 반환값 없음
3시
- JVM 메모리 구조 & String
- JVM 메모리 영역
- 스택 : main() 메서드 실행 공간
- 힙 : new 키워드로 생성된 객체 저장 공간
- String 객체 차이
- "java programming" → 스택에 문자열 리터럴 저장
- new String("java programming") → 힙에 객체 생성, 참조값이 스택에 저장됨
- 예제 코드
String str = new String("java programming");
char result = str.charAt(0);
System.out.println("charAt 실행 결과 => " + result);
API 사용 절차 정리
new로 객체를 힙에 생성
. 연산자로 메서드 호출
리턴값이 있으면 같은 타입의 변수에 저장 후 활용
4시
import와 패키지
- 단축키: Ctrl + Shift + O → 자동 import
JVM 인식 범위
- 현재 클래스 패키지 + java.lang 패키지 기본 인식
- 그 외 패키지는 import 필요
// import 형식
import java.io.*;
import java.io.BufferedReader;
5시
- Scanner & 표준 입출력
- 표준 출력 (console) : System.out
- 표준 입력 (keyboard) : System.in
이후 학습: Scanner를 사용한 입력 처리
9/5
9시
오늘
복습
- 스택 : 필요한 값들을 저장하는 메모리
- 힙 :
- new 클래스 이름() → 사용하기 위해 메모리에 올리는 과정 → 객체생성, 인스턴스 생성
- 같은 타입의 변수를 사용해 받아주면 (Random r = new Random()) 스택에 참조값을 갖게됨
- r.nextInt() → .을 리턴값을 가져옴.
- 접근 권한 - public, protected(상속관계), default, private
💡 접근제어자
- public: 모든 패키지의 모든 클래스에서 접근 가능
- protected: 같은 패키지의 모든 클래스에서 접근이 가능하고 다른 패키지에서는 상속관계에 있는 클래스만 접근 가능
- default: 같은 패키지의 모든 클래스에서 접근 가능
- private: 선언된 클래스에서만 접근할 수 있다.
10시
메소드 정의 기본 구성
- 접근 제어자 (특성제어자) 리턴타입(없으면 void) 메소드명(매개변수 list)
- public ( ) void test(동사적특성) (print())
11시
12시
- 연습 많이 해야 함.

2시

3시~
- 조퇴 - 생성자 조금이랑 getter, setter 배웠다고 함.