HCD 랩스 9월 1주차 - Java

우영·2025년 9월 9일

HDC 랩스 풀스택 1기

목록 보기
2/20

9/1

인프라 & 보안 공부 기록

인프라 개념 정리

  • 서버 : 정보를 제공하는 집
  • 네트워크 : 도로 같은 개념
  • 데이터베이스(DB) : 창고/저장소
  • 클라우드 : 서버 공간을 빌려 쓰는 것

네트워크 7계층 (OSI 7 Layer)

  1. 물리 계층 : 실제 케이블, 전송 매체
  2. 데이터링크 계층 (L2) : 스위치, MAC 주소 기반 통신 (기기 고유 번호)
  3. 네트워크 계층 (L3) : IP 주소 기반 통신
  4. MAC → 같은 네트워크끼리만 가능
  5. IP → 다른 네트워크끼리 통신 가능
  6. 전송 계층 : TCP/UDP (신뢰성 vs 속도)
  7. 세션 계층 : 세션 관리
  8. 표현 계층 : 데이터 표현 방식
  9. 응용 계층 : 실제 애플리케이션 서비스

인프라의 중요한 특성

  1. 확장성 – 사람이 몰리면 서버 늘려야 함
  2. 안정성 – 24시간 서비스 유지
  3. 모니터링 – 문제가 생겼을 때 빨리 알 수 있어야 함

보안 기본 개념

  • 방화벽 : 외부에서 들어오는 불필요한 트래픽 차단
  • VPN : 안전한 통신로
  • IDS/IPS : 침입 감지 및 차단 (CCTV + 경비원 느낌)

웹 개발과 연결 지어 생각하면:

  1. HTTPS 인증서 관리 – 서버에 SSL 적용
  2. 로그인 관리 – 세션/토큰 (JWT 등)

Spring Boot 간단하게
= 웹 서버(아파치, 톰캣) + 클라우드 환경(AWS) + 프레임워크가 합쳐진 느낌.
→ 결국 웹 서버를 쉽게 개발할 수 있게 도와주는 툴킷 같은 것.

기술 면접 대비

  1. HTTP Method 차이
  • GET : 조회
  • POST : 생성
  • PUT : 전체 수정
  • DELETE : 삭제
  1. HTTP 상태 코드
  • 200 : 성공
  • 400 : 잘못된 요청
  • 404 : 리소스 없음
  • 500 : 서버 내부 오류
  1. 프로세스 vs 스레드
  • 프로세스 : 실행 중인 프로그램
  • 스레드 : 프로세스 안에서 실행되는 작은 작업 단위
  1. RDB vs NoSQL
  • RDB : 테이블 기반, 스키마 고정, SQL 사용, 트랜잭션 보장
  • NoSQL : 자유로운 구조, 확장성 유리
  1. DB 인덱스
  • 장점 : 검색/조회 성능 향상
  • 단점 : 인덱스 관리 비용 발생
  1. 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 연동 기본
  • 인텔리제이는 나중에 사용 예정

자바 실행 과정

  1. 소스파일 작성 → .java 확장자
  2. 컴파일 (javac) → .class 바이트코드 생성
  3. JVM 실행 (java 파일명)

참고

  • servlet: 웹에서 쓰이지만 직접 활용 빈도는 낮음

12시

JDK 설치 및 환경 변수 설정

  • 오라클 JDK 21 다운로드
  1. JAVA_HOME → JDK 경로 설정
  2. PATH → bin 폴더 경로 추가

버전 변경 방법

  • 고급 시스템 설정 → JAVA_HOME 값 변경
  • PATH 값 수정 및 순서 이동

메모장 실습

  1. HelloWorld.java 작성
  2. CMD에서 javac HelloWorld.java
  3. 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시

연산자

    • 연결 연산자
  • 문자열 + 숫자 = 문자열

  • 논리 연산자

  • && : 앞이 false면 뒤는 검사하지 않음 (효율적)

  • & : 모든 항을 검사 (비효율적)

11시

  • 인터프리터 언어

  • 자바는 컴파일 + 인터프리터 혼합 방식

  • .java → javac(컴파일) → .class 바이트코드 생성 → java(인터프리터) 실행

  • 실행 중 오류 발생 가능

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문
    • 조건과 관계없이 최소 1회 실행 보장

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 배웠다고 함.

0개의 댓글