9osari.log

Writing

65 postsRSS

[보안] 취약점 보고서와 인증/인가

회사에서 취약점 보고서를 받았다. 계열사 보안 담당자가 회의실에서 발표를 했다. 어떤 프록시 프로그램으로 API 응답값을 바꿔서 다시 보내면, 관리자 화면이 그냥 열린다. 요청에 들어가는 id를 남의 것으로 바꾸면, 남의 회원정보가 조회된다. 심지어 다른 사람의 비밀번호를 내가 바꿀 수

java, jpa, spring

[리팩토링] 도메인 책임 위치를 잘못 잡았을 때 보이는 신호

사람에 붙인 자격증명을, 연동 채널로 옮긴 이야기 외부 시스템 연동을 위한 OAuth 자격증명(clientId / clientSecret / clientEmail)을 처음엔 Operator라는 "사람" 엔티티에 박았다. 일주일 뒤, 동일한 자격증명을 ExternalChannel이라는 "

refactoring, java, spring

[리팩토링] 복잡한 승인 로직, SRP와 DRY 원칙으로 통합하기

공통 모듈 캡슐화로 승인 로직 리팩토링 들어가며 최근 신규 기능을 개발하던 중, 기존 모듈들에 흩어져 있는 승인/반려 로직을 전반적으로 훑어볼 기회가 있었습니다. 처음에는 별다른 위화감이 없었지만, 코드를 하나씩 따라가다 보니 소름 돋을 정도로 익숙한 패턴들이 눈에 들어오기 시작했습니다

refactoring, java, spring

[JVM] 메모리 구조와 객체 흐름

도입 남한테 설명할 줄 알아야 진짜 공부가 된거다. JVM에 대해 한번 공부했지만 기억에 남는건 별로 없었다. 이제부턴 모르는 사람에게 이 개념을 설명한다 상상하고 혼자 설명하며 공부해보려한다.. JVM의 역할과 RunTime Data Area 구조, 그리고 객체가 생성되고 GC로 정리

java, jvm

[Thread] 생산자-소비자 패턴

DevBid 프로젝트에서 입찰 동시성 제어를 Redis 분산락으로 구현했지만 자바 기본 동시성 메커니즘을 제대로 이해하고 싶어 김영한 선생님의 자바 고급편 강의를 듣고 있다. 그 중 생산자-소비자 문제를 BlockingQueue 로 이해하고 정리한 포스팅이다. 락의 2단계 대기 상태 s

java, thread, 김영한-java-고급

[Spring Security] 카카오와 구글 소셜로그인 구현하기

도입 이유 기존 DevBid의 로그인 흐름은 세션 기반 인증이었다. 이 구조는 단순하고 안정적이지만, 경매 플랫폼 특성상 몇 가지 한계가 있었다. 회원가입 허들이 높다 경매는 충동적으로 참여가 이루어지는 경우가 많다. 가입 과정에서 이메일 인증, 비밀번호 규칙 등의 절차가 길어지면 이탈

devbid, spring, spring-boot

[OS] 프로세스와 스레드

멀티태스킹 CPU가 매우 빠르게 두 프로그램의 코드를 번갈아 수행해 사람이 느낄 때 두 프로그램이 동시에 실행되는 것처럼 느끼는 것. 각 프로그램의 실행 시간을 분할해 마치 동시에 실행되는 것 처럼 하는 기법을 시분할(Time Sharing, 시간공유) 기법이라 한다. 따라서 CPU 코

java, spring, os

[Spring] Spring AOP 이해하고 적용하기

AOP란? Aspect-Oriented Programming (관점 지향 프로그래밍) 로깅, 트랜잭션, 보안 같은 공통 기능을 비즈니스 로직에서 분리하는 기법 AOP 없이 구현 비즈니스 로직보다 부가 기능 코드가 더 많다.. 이런 코드가 모든 메서드에 반복된다면..? ~~끔찍~~ AOP

java, spring, spring-boot

[DevBid - 실시간통신] AWS EC2 Redis 환경에서 Pub/Sub와 분산락 검증

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 2. WebSocket 메시지 동기화 문제와 Redis 선택 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 4. Redis 도입 후 마주한 문제와 해결 5. 멀티서버 환경에서 Pub

devbid, redis, spring-boot

[DevBid - 실시간통신] Redis 도입 후 마주한 문제와 해결

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 2. WebSocket 메시지 동기화 문제와 Redis 선택 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 4. Redis 도입 후 마주한 문제와 해결 ← 현재 글 5. 멀티서버 환

devbid, redis, spring-boot

[DevBid - 실시간통신] Redis 분산락과 Pub/Sub 으로 멀티서버 동시성 제어

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 2. WebSocket 메시지 동기화 문제와 Redis 선택 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 ← 현재 글 4. Redis 도입 후 마주한 문제와 해결 5. 멀티서버 환

devbid, redis, spring-boot

[DevBid - 실시간통신] 멀티 서버 환경에서 Redis Pub/Sub이 필요한 이유

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 2. WebSocket 메시지 동기화 문제와 Redis 선택 ← 현재 글 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 4. Redis 도입 후 마주한 문제와 해결 5. 멀티서버 환

devbid, redis, spring-boot

[DevBid - 실시간통신] WebSocket으로 실시간 경매 구현하기

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 ← 현재 글 2. WebSocket 메시지 동기화 문제와 Redis 선택 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 4. Redis 도입 후 마주한 문제와 해결 5. 멀티서버 환

devbid, java, jpa

[DevBid - JPA] 낙관적 락 적용과 데드락

개인 프로젝트에서 경매 입찰 기능을 개발하던 중, JMeter로 동시 입찰을 테스트했더니 10명이 입찰했는데 3개의 입찰이 성공하고 입찰 카운트는 1만 증가하는 데이터 정합성 문제가 발생했습니다. 실제 저장된 입찰 수와 경매 객체의 상태가 일치하지 않았고, 이는 여러 트랜잭션이 동시에

jpa, devbid, java

[Network] 네트워크 장애 대응기

네트워크 접속 이슈... 지금 시스템 접속이 안 되는데요? 오늘 PQ 진행해야하는데.. 급하게 VPN을 켜고 접속을 시도했다. 내 PC에서는... 멀쩡하게 접속된다. -- 상황 파악 침착하게 상황을 정리해봤다. 문제 증상 고객사 사용자들만 데이터 조회 시 무한 로딩 내 PC에서 접속 시

network, http, was

[쿼리튜닝] 공통쿼리 개선

문제 상황 시스템의 주요 통합 조회 화면에서 조회시간이 오래걸려 사용자들의 불만이 지속적으로 발생했습니다. 확인 결과 조회쿼리가 공통 쿼리로 사용되고 있어 20개 이상의 팝업과 그리드에서 동시에 사용 중이었고, 모든 화면의 응답시간이 평균 4.5초로 매우 느렸습니다. 하나의 공통 쿼리를

java, spring, database

[DevBid - AWS] 파일업로드 Presigned URL 리펙토링

📚 파일 업로드 시리즈: 1. [[DevBid - AWS] S3 파일업로드](/posts/aws-s3-file-upload/) - 기본 구현과 발견된 문제점 2. 파일업로드 Presigned URL 리팩토링 (현재 글) 기존 방식의 문제점 이전글 S3 파일업로드에서 서버를 경유하는 방

devbid, aws, spring-boot

[DevBid - AWS] S3 파일업로드

📚 파일 업로드 시리즈: 1. AWS S3 파일업로드 (현재 글) 2. [[DevBid - AWS] 파일업로드 Presigned URL 리펙토링](/posts/aws-s3-presignedurl/) 개요 개인 프로젝트 DevBid 경매 플랫폼에서 상품 이미지 업로드 기능을 구현했다.

devbid, aws, spring-boot

[DevBid - JPA] 카테고리 트리 N+1 최적화

개요 DevBid의 상품 등록 페이지에서 카테고리 트리를 로드할 때 N+1 문제가 발생했다. 루트 카테고리 수만큼 추가 쿼리가 실행되어 총 9개의 SQL이 발생했고, 이를 3개로 줄이는 과정을 다룬다. 상품 등록 페이지 로딩 시 Category 트리 로딩 때문에 9개의 SQL 발생 재귀

devbid, jpa, spring-data-jpa

[DevBid - HTTP] Form 환경에서 RESTful 설계

리팩터링 계기 개인 프로젝트를 만들면서 URL을 대충 /productsmain, /product/new 이런 식으로 만들었는데, 김영한 선생님의 HTTP 강의를 들으면서 "아, 내 URL 설계가 엉망이구나"를 깨닳았다. 특히 RESTful 원칙을 배우면서 URL은 자원(리소스)을 표현해

devbid, web, http

[JPA] JPQL과 페치 조인

JPQL (Java Persistence Query Language) JPQL란? 테이블이 아닌 객체를 검색하는 객체지향 쿼리 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음 엔티티와 속성은 대소문자를 구분함 (Member, username) JPQL 키워드는 대소문자를 구

java, spring, database

[JPA] 연관관계 매핑

객체와 테이블의 연관관계 차이 테이블의 연관관계 테이블은 외래키 하나로 양방향 조회가 가능하다. 외래키 TEAMID 하나만 있으면 양쪽 다 조회 가능 (양방향) -- 객체의 연관관계 객체는 참조(reference)를 사용해 연관관계를 갖는다. 단방향 연관관계 (Member → Team만

java, spring, database

[JPA] 프록시, 지연로딩, 영속성 전이

Proxy 프록시란? 실제 엔티티 대신 사용되는 가짜 객체 프록시 객체에 getName() 호출 프록시 객체가 실제 엔티티가 생성되지 않았으면 영속성 컨텍스트에 초기화 요청 영속성 컨텍스트가 DB 조회 실제 Entity 생성 프록시 객체가 실제 Entity를 참조하도록 연결 실제 Ent

java, spring, database

[JPA] JAVA ORM 표준 JPA

JPA(Java Persistence API) SQL 없이 객체를 데이터베이스에 직접 저장할 수 있게 하고, 객체와 관계형 데이터베이스를 명확히 구분해준다. 즉, 중간에서 매핑 역할을 수행하는 ORM(Object-Relational Mapping) 기술의 표준 인터페이스이다. 객체지향과

java, spring, jpa

[리팩토링] 레거시 코드와 SRP

점점 비대해지는 savePlan 공급사 점검계획 등록/수정 기능을 만들다가 요구사항이 추가되면서 하나의 메서드에 모든 로직이 쌓이기 시작했다 키값이 없으면 최초저장, 있으면 수정 정도만 있었는데 공통승인 로직까지 생각하게 되니 점점 복잡해졌다. 그 결과 메서드 하나에 모든 로직이 들어갔

java, oop, spring

[리팩토링] UserEntity SRP/DIP 위반과 해결

User 엔티티의 문제점 엔티티는 도메인 모델이자 비즈니스 로직과 상태만 가져야 한다. 하지만 기존 코드는 SRP와 DIP를 위반하고 있었다. DIP(의존성 역전 원칙) 위반 도메인 계층의 User가 인프라 계층의 PasswordEncoder(기술 서비스) 에 의존한다. 즉 도메인 모델

devbid, java, design-pattern

[DDD] 도메인 주도 설계란 무엇인가

DDD 전체 구조 전략적 설계 (Strategic Design) "무엇을 만들 것인가?" - 큰 그림 관점 1. 유비쿼터스 언어 (Ubiquitous Language) 개발자, 기획자, 도메인 전문가가 똑같은 용어로 소통 예: 경매 시스템 "입찰한다" → placeBid() "낙찰된다"

java, design-pattern, oop

[DDD] Factory Method & Repository

Factory method “객체를 어떻게 만드는지” 보다 “왜/언제 만들어 지는지” 를 드러내고 복잡한 생성과정을 감추는 역할 Factory method의 장점 생성 로직이 복잡한 경우 new User(username, email, password, …) 같이 끝나지 않고 암호화, 중

devbid, java, design-pattern

[JAVA] 순회와 정렬

순회란? 자료구조에서의 순회는 자료구조에 들어있는 데이터를 차례대로 접근해 처리하는 것을 순회라 한다. ArrayList, LinkedList, HashSet, Set, Tree 등 다양한 자료구조가 있는데 각 자료구조마다 순회하는 방법이 모두 다르기 때문에 자바는 자료구조의 구현과 상

java, 김영한-java-중급

[JAVA] Map / Stack / Queue

Map Map은 Key-Value 의 쌍을 저장하는 자료구조 Key는 유일, Value는 중복 가능 같은 Key로 저장하면 Value 교체 순서를 유지하지 않음 HashMap, LinkedMap, TreeMap 등 다양한 구현체 제공 (HashMap이 가장 널리 쓰인다) Map 인터페이

java, 김영한-java-중급

[JAVA] Set

Set Set은 중복을 허용하지 않고, 순서를 보장하지 않는 자료구조. 어떤 요소도 같은 Set 내에 두 번 이상 나타날 수 없다. Set은 수학적 집합 개념을 구현한 것으로 순서를 보장하지 않고 특정 요소가 집합에 있는지 여부를 확인하는데 최적화. Set 인터페이스는 HashSet,

java, 김영한-java-중급

[JAVA] HashSet

문자열 해시 코드 해시 인덱스를 사용하면 데이터의 값을 배열의 인덱스로 사용해야 한다. 하지만 배열의 인덱스는 1,2,3 같은 숫자만 사용할 수 있다. A, B, C 와 같은 문자열은 배열의 인덱스로 사용할 수 없다. 문자열을 저장할 때 해시 인덱스를 사용해 보자. 문자를 숫자로 변경하

java, 김영한-java-중급

[JAVA] Hash

List와 Set List 요소들의 순차적인 컬렉션, 특정 순서를 가지고 중복을 허용한다. 순서 유지 → 특정 순서를 유지한다 이 순서는 요소가 추가된 순서를 반영할 수 있다. 중복 허용 → 동일한 값이나 객체의 중복을 허용 인덱스 접근 → 리스트의 각 요소는 인덱스를 통해 접근할 수

java, 김영한-java-중급

[JAVA] List

추상화와 다형성 ArrayList와 LinkedList 실습내용을 기반으로 공통 기능을 인터페이스로 뽑아서 추상화하면 다형성을 활용한 다양한 이득을 얻을 수 있다. 같은 기능을 제공하는 메서드를 MyList 인터페이스로 뽑아보자. 다형성에 대해 - https://9osari.netlif

java, 김영한-java-중급

[JAVA] LinkedList

노드(Node) 배열은 크기를 미리 지정해야 하며, 중간에 데이터를 삽입/삭제할 때 성능에 제약이 있음. 이를 해결하기 위해 동적으로 메모리를 확보하고, 각 데이터를 노드(Node)로 만들어 연결하는 구조가 연결 리스트(Linked List)다. 노드는 내부에 데이터와 다음 노드에 대한

java, 김영한-java-중급

[JAVA] ArrayList

컬렉션 프레임워크 프로그래밍을 하면 데이터를 여러 개 저장하고 처리할 일이 많다. 이럴 때 쓰는 구조가 배열인데, 배열은 몇 가지 한계가 존재한다. 배열은 크기를 미리 지정해야 한다. → 동적으로 늘어나지 않음 추가/삭제가 번거로움 검색, 정렬, 중복 체크 등 다양한 기능 부재 이런 한

java, 김영한-java-중급

[JAVA] Generic

Generic Generic 을 사용하는 이유 코드 재사용성 증가: 동일한 로직을 다양한 타입에 대해 반복해서 작성하지 않아도 됨 → List List 등 동일한 List 로직 재사용 타입 안정성 향상: 컴파일 타임에 타입 체크 가능 → 잘못된 타입 사용 시 컴파일 에러 발생 → 런타임

java, 김영한-java-중급

[JAVA] 예외 처리

예외처리가 필요한 이유 외부 시스템(서버, DB, 파일시스템) 은 항상 실패 가능성이 존재 ex) 서버 연결 실패, 네트워크 끊김 등 정상 흐름과 예외 흐름이 섞이면 가독성이 떨어짐 외부 자원을 사용한 후 연결을 해제해 외부 자원을 반드시 반납해야 한다. 예외 처리는 오류 발생 시 프로

java, 김영한-java-중급

[JAVA] 중첩 클래스와 내부 클래스

중첩 클래스 중첩 클래스는 바깥 클래스의 안에 있지만, 바깥 클래스와 상관 없는 전혀 다른 클래스 중첩 클래스의 종류 정적 중첩 클래스 - static 이 붙고, 바깥 클래스의 인스턴스에 소속되지 않음 내부 클래스 - static 이 붙지 않고, 바깥 클래스의 인스턴스에 소속 내부 클래

java, 김영한-java-중급

[JAVA] ENUM - 열거형

열거형 - ENUM 열거형(Enum Type)을 이해하기 위한 예제를 만들어보자 고객을 3개의 등급으로 나누고, 상품 구매 시 등급별로 할인을 적용한다. (소수점 버림) BASIC → 10% 할인 GOLD → 20% 할인 DIAMOND → 30% 할인 할인등급을 String 으로 표현했

java, 김영한-java-중급

[JAVA] 래퍼, Class 클래스

기본형의 한계와 래퍼 클래스 기본형의 한계 자바는 객체 지향 언어이지만 int, double 같은 기본형(Primitive Type) 은 객체가 아니라 객체 지향의 장점을 온전히 사용할 수 없다. 기본형의 한계를 이해하기 위해, 두 값을 비교해서 다음과 같은 결과를 출력하는 간단한 코드

java, 김영한-java-중급

[JAVA] String 클래스

자바에서 문자열 문자 하나: char 자바에서 문자를 다루는 가장 기본적인 타입. 여러 문자를 다루려면 char[] 을 사용한다. 하지만 char[] 는 직접다루기 불편하기에 자바에서는 String 클래스를 제공한다. 문자열: String 문자열 리터럴은 문자열 풀에 저장되어 중복 방지

java, 김영한-java-중급

[JAVA] 불변 객체

자바 데이터 타입 분류 기본형(Primitive Type): 값을 직접 저장. 공유 X 참조형(Reference Type): 객체의 참조값을 저장. 공유 O -- 기본형은 값 복사 b = a 는 값을 복사함 → a, b 는 완전히 별개 -- 참조형은 참조값 복사 (공유 발생) a, b

java, 김영한-java-중급

[JAVA] Object 클래스

java.lang 패키지란? 자바 언어의 기본 클래스들이 포함된 패키지 자동 import됨 → 따로 import java.lang. 안 써도 됨 대표 클래스: Object: 모든 자바 객체의 부모 클래스 String: 문자열 System: 시스템 관련된 기본 기능 Integer Long

java, 김영한-java-중급

[JAVA Questions] 다형성 복습

1. 다형성이란 무엇인가 ? 하나의 객체가 여러 타입으로 참조될 수 있는 능력 -- 2. 다형적 참조란 ? 부모 타입 변수로 자식 인스턴스를 참조하는 것 -- 3. 업캐스팅은 왜 안전하고, 다운캐스팅은 왜 위험한지 업캐스팅은 자식 객체가 부모 기능을 모두 포함하기 때문에 항상 안전 다운

java, questions, 김영한-java-기본

[JAVA Questions] 상속 복습

1. 상속이란 무엇인가요? 한 줄로 설명해보세요. 상속이란 부모의 기능을 자식이 물려받아 사용하는 걸 말함. -- 2. 자바에서 하나의 클래스가 여러 부모 클래스를 동시에 상속받을 수 있나요? (O / X) 없음. -- 3. 상속 관계에서 메서드를 탐색할 때 어떤 순서로 탐색하나요? 자

java, questions, 김영한-java-기본

[JAVA Questions] final 복습

1. final 키워드가 변수에 붙으면 어떤 효과가 발생하나요? 그 변수의 값은 바꿀 수 없다. -- 2. final 지역변수는 몇 번까지 값을 할당할 수 있나요? 딱 한번 -- 3. final 필드를 '생성자'에서 초기화할 때와 '필드 선언부'에서 초기화할 때 차이는 무엇인가요? 필드

java, questions, 김영한-java-기본

[JAVA Questions] 메모리 구조와 static 복습

메서드 영역에 저장되는 것은? 메서드 영역에는 클래스 정보, static 변수, static 메서드, 상수 풀 등이 저장된다. 이 영역은 프로그램이 실행되는 동안 모든 스레드가 공유한다. -- 힙 영역과 스택 영역의 차이 힙 영역은 new 키워드로 생성된 객체(인스턴스)가 저장되는 공간

java, questions, 김영한-java-기본

[JAVA Questions] 접근제어자 복습

접근 제어자는 왜 쓸까? 외부에서의 잘못된 접근을 막고 객체의 상태를 보호하기 위해 private으로 필드를 선언하는 이유? 외부에서 직접 접근을 막고, getter/setter 같은 안전한 방식으로만 값을 읽거나 변경하도록 하기 위해. public, private, protected,

java, questions, 김영한-java-기본

[JAVA] 다형성_2

다형성의 활용 다형성을 왜? 사용하는지 다형성을 사용하지 않고 프로그램을 만든 후 다형성을 사용해보자 개, 고양이, 소의 울음 소리를 테스트 하는 프로그램 작성 클래스 마다 sound() 메서드를 따로 만들고 호출하는 코드가 중복된다. 새로운 동물이 추가될 때마다 같은 구조의 코드가 반

java, 김영한-java-기본

[JAVA] 다형성_1

다형성이란? 다형성(Polymorphism)은 다양한 형태를 의미. 프로그래밍에서 다형성이란, 하나의 객체가 여러 타입으로 참조될 수 있는 능력을 말한다. 보통 하나의 객체는 하나의 타입으로만 사용된다. 하지만 다형성을 사용하면 하나의 객체가 여러 타입으로 사용될 수 있다. 다형성을 이

java, 김영한-java-기본

[JAVA Questions] 생성자 예상질문

1. 생성자를 왜 쓰는지? 객체가 생성될 때 초기 상태를 설정하기 위해 사용 필드 초기화를 자동화 하고, 객체 사용 전 필요한 값들을 설정할 수 있음. -- 2. 자바에서 생성자 오버로딩이 필요한 이유? 객체를 다양한 방식으로 초기화할 수 있도록 하기 위해 -- 3. 생성자를 사용하지

java, questions, 김영한-java-기본

[JAVA Questions] 객체지향 프로그래밍 예상질문

1. 객체지향 이란? 현실세계의 사물이나 개념을 객체로 표현하고 이 객체들 간의 상호작용을 통해 프로그램을 구성하는 방식 -- 2. 절차지향 프로그래밍에서 데이터와 기능이 분리되어 있을 때 발생할 수 있는 문제점은? 데이터와 로직이 분리되어 있어 데이터의 상태를 예측하거나 제어하기 어렵

java, questions, 김영한-java-기본

[JAVA Questions] 기본형과 참조형 예상질문

🔗 정리 글 바로가기: 기본형과 참조형 ✅ 1. 기본형과 참조형의 차이 Q. 기본형과 참조형의 가장 큰 차이점은 무엇인가요? 기본형은 값을 직접 변수에 대입 하는 것이고, 참조형은 참조값(주소값)을 변수에 대입 하는 것입니다. -- ✅ 2. String은 기본형? 참조형? String

java, questions, 김영한-java-기본

[JAVA] 상속

상속이란? 상속(Inheritance)은 부모 클래스의 필드와 메서드를 자식 클래스가 물려받아 사용하는 기능이다. 중복 코드를 줄이고, 공통된 기능을 재사용할 수 있음 extends 키워드를 사용하여 상속 자식 클래스는 부모의 기능을 사용할 수 있지만, 부모는 자식의 기능을 모름 자바는

java, 김영한-java-기본

[JAVA Questions] 클래스와 객체 예상질문

✅ 1. 클래스와 객체에 대한 기본 개념 Q. 클래스와 객체의 차이를 설명해보세요. 클래스는 객체를 생성하기 위한 설계도 이고, 객체는 클래스(설계도)를 기반으로 메모리에 생성된 실체 입니다. -- ✅ 2. 객체 생성과 메모리 구조 Q. new 키워드를 사용하면 메모리에는 어떤 일이 발

java, questions, 김영한-java-기본

[JAVA] final

final 이란? 이름 그대로 ‘끝’ 이라는 뜻이다. 변수에 final 키워드가 붙으면 더 이상 값을 변경할 수 없다. final 지역변수 final이 붙은 지역 변수는 최초 한 번만 값을 할당할 수 있습니다. 한 번 값을 할당한 이후에는 다시 값을 변경할 수 없습니다. 선언과 동시에

java, 김영한-java-기본

[JAVA] 메모리 구조와 static

런타임 데이터 영역(Runtime Data Area) 메서드 영역 : 클래스 정보를 보관, 이 클래스 정보가 붕어빵 틀이다. 스택 영역: 실제 프로그램이 실행되는 영역, 메서드를 실행할 때 마다 하나씩 쌓임 힙 영역: 객체(인스턴스)가 생성되는 영역, 붕어빵틀로 생성된 붕어빵이 존재하는

java, 김영한-java-기본

[JAVA] 접근제어자

접근 제어자 자바는 public, private 같은 접근 제어자(access modifier)를 제공한다. 접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용하거나 제한할 수 있다. 접근 제어자를 왜 쓰는지 알아보자. 내가 은행 계좌 시스템을 만들었다

java, 김영한-java-기본

[JAVA] 생성자

생성자 왜 쓸까? 객체를 자동으로 초기화 해주기 위해 중복을 줄이고 초기화 로직을 모아서 관리 가능 객체를 다양하게 초기화 가능 (오버로딩) this() 객체 내부에서 자신의 참조값을 가르킬때 사용 ✅ this 를 제거하면 title은 둘다 매개변수를 뜻하게 된다. 따라서 값이 변경되지

java, 김영한-java-기본

[JAVA] 객체지향 프로그래밍

프로그래밍은 크게 두 가지로 나뉘는데 그 두가지를 절차지향 프로그래밍과 객체지향 프로그래밍 이라 한다. 절차지향 프로그래밍(Procedural Programming) 이름 그대로 순서대로 시작하는 일련의 과정을 중심으로 프로그래밍 하는 방식 데이터보단 절차(로직)을 중심으로 생각 프로그

java, 김영한-java-기본

[JAVA] 기본형과 참조형

기본형과 참조형 기본형 소문자로 시작 값을 직접 지정 null 대입 불가 산술연산 가능 기본형을 제외한 나머지 변수는 모두 참조형 참조형 참조값(주소값)을 복사 개발자가 직접 지정 가능 클래스와 배열을 다룰 수 있음 null 대입 가능 산술연산 불가 !!!기본형은 사용하는 값을 복사해

java, 김영한-java-기본

[JAVA] 클래스와 객체

클래스는 개념을 만드는 것. 변수를 사용해 학생의 이름, 나이, 성적을 출력해 보자 변수를 사용하면 학생이 늘어날 때 마다 변수를 추가로 선언해야 하고 추가해줘야 하는 번거로움이 있다. 배열을 사용해 보자 배열을 사용하면 학생이 늘어나도 변수를 추가하지 않고 배열에 학생 데이터만 추가해

java, 김영한-java-기본

[JAVA] JVM의 동작원리

-- JVM 요약도 JVM이란? JVM(Java Virtual Machine)은 자바 바이트코드를 운영체제에 독립적으로 실행할 수 있도록 해주는 가상 실행 환경으로, 클래스 로딩부터 메모리 관리, 실행까지 전 과정을 담당하는 자바의 핵심 엔진입니다. 사용자가 작성한 코드는 Javac(자

java, jvm

[Network] Web과 WAS, 그리고 Spring 🌱

-- 웹 서버와 WAS의 차이, 그리고 Spring의 역할 -- Web Server 란? 브라우저로부터 HTTP 요청을 받고 요청에 맞는 정적 콘텐츠를 제공하는 프로그램 요청값에 상관없이 동일한 콘텐츠 제공 (HTML, CSS, image) 정적 리소스를 클라이언트에 서빙하는 역할 We

network, web, spring