본문 바로가기

전체 글193

[공부]Java에서 Static은 왜 객체없이 실행될까 ? Main 클래스와 static / non-static이 헷갈렸던 기록.. 자바를 처음 배우면서 가장 오래 이해가 안갔던 개념이 static이었다분명 설명은 많이 봤는데 static을 떠올리면 항상 이런 생각이 들었다static은 왜 공용인가 ?왜 main 메서드는 무조건 static일까이 글은 static을 처음 배울 때 내가 실제로 던졌던 질문들을 기준으로 static / non-static 관점에서 정리한 기록이다 [서론]자바는 객체지향 언어다. 보통 클래스를 사용하려면 Car car = new Car(); 처럼 클래스를 바탕으로 객체를 만들어야 한다하지만 static이 붙는 순간 그 규칙이 깨진다 객체를 생성하지 않고도 Car.count 처럼 바로 접근이 가능해진다이 현상의 열쇠는 JVM의 메모리.. 2026. 2. 6.
[공부] WebSocket과 SSE 개념만 간단히 정리해보자 WebSocket웹소켓은 클라이언트와 서버 간 양방향 통신이다. 한번 연결되면 계속 열린 상태로 유지된다특징으로는 Full-Duplex, 낮은 지연시간으로 실시간 상호작용에 최적이다 통신의 흐름은 아래와 같다 Client -------- HTTP Handshake -------> ServerClient -> http 상태코드 101은 통신 프로토콜을 변경하겠다는 의미로 HTTP -> WebSocket 프로토콜로 전환을 알리는 응답Client Server Websocket의 장점으로는 실시간성이 높고 양방향 통신이 가능한 점이고단점은 그 실시간 연결을 유지하는 데 리소스가 든다는 점이다. SSE(Server-Sent Events)SSE는 서버에서 클라이언트로 데이터를 일방적으로.. 2026. 1. 16.
[공부] FK(Foreign Key)란 오늘 포스팅은 FK 를 공부해보겠다 FK 외래키란 무엇이냐.한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키다. 간단히 말하자면 두 테이블을 연결해주는 연결고리다 FK를 사용하는 이유는 데이터의 꼬임을 방지하기 위함인데,1. 존재하지 않는 데이터를 방지하고 2. 부모 테이블에서 자식 테이블이 참조하고 있는 데이터를 삭제하려고 할때 이를 막거나 함께 지우도록 설정할 수 있다 즉, 데이터의 무결성을 유지하기 위함이다 예시를 보자예를들어, USER 테이블이 있고 USER_DEATIL 테이블이 있다고 가정해보자USER 테이블의 PK인 user_id를 USER_DETAIL에서 참조하고 있다. 만약 누군가 USER_DETAIL 테이블에 user_id 10001 을 넣으려고 한다면,DB에서 "USER .. 2026. 1. 15.
[공부] DDL & DML & DCL 이번 글에서는 DDL 과 DML, DCL에 대해 간단히 정리해보겠다이 세트는 SQL의 3대장이다 먼저 DDL (Data Definition Language, 데이터 정의어)는 데이터베이스의 구조를 정의하는 언어다주로 테이블 자체를 만들거나 변경할 때 사용한다 주요 명령어로는 CREATE, ALTER, DROP, TRUNCATE 가 있다*truncate는 지금 첨 봤는데 테이블의 모든 데이터를 삭제하는 명령어다, delete와 다르게 rollback 불가 다음은 DML (Data Manipulation Language, 데이터 조작어)는 정의된 틀 안에서 데이터를 넣고 관리하는 언어다테이블 내부의 데이터를 조회하거나 수정한다 주요 명령어로는 SELECT, INSERT, UPDATE, DELETE 가 있다 .. 2026. 1. 14.
[공부] MVC / MVVM / MVI 이번 포스팅은 .. MVC / MVVM / MVI를 정리하고 넘어가겠다 [MVC / MVVM / MVI 를 비교한 표] 이 세가지 디자인 패턴의 차이의 핵심은 "상태를 누가, 어떻게 어느 방향으로 관리하느냐" 에 있다 MVC ( Model - View - Controller )Model(데이터, 비즈니스 로직) View(화면) Controller(사용자 입력 처리, 흐름제어) MVC 패턴은 가장 기초적이고 널리 쓰이는 구조지만, 프로젝트 규모가 커질수록 고질적인 문제에 직면한다 1. Controller가 점점 비대해진다.- 모든 서비스 로직이 Controller로 몰리면서 유효성 검사, 권한체크, 상태 분기, 로그 등이 쌓여 테스트 어려움, 가독성 저하와 같은 문제를 일으킨다 2. View와 Mo.. 2026. 1. 9.
[공부]데이터 정규화 나의 포트폴리오를 검토하면서 데이터 정규화 개념을 한번 정리하고 넘어가려한다 데이터 정규화란 뭐냐.데이터베이스를 처음 설계할 때 가장 많이 듣는 말 중 하나가 "정규화해서 테이블 나눠라"이다데이터베이스 쪽은 내 메인 분야가 아니라 데이터베이스 설계 시에 데이터 정규화가 무엇인지만 알고 있었지그 필요성과 어디까지 해야하는지는 명확하지 못했던 것 같다. 이번 글에서는 데이터 정규화에 대한 추상적인 정의보다는 실제 예시를 통해 내 머릿속을 정리하려고 한다 데이터 정규화(Normalization)란데이터베이스 설계 과정에서 중복 데이터를 줄이고, 데이터 무결성을 유지하기 위해 테이블 구조를 단계적으로 분리하는 과정이다. 제 1정규형 (1NF) - 모든 속성은 원자값(Atomic Value)을 가져야 한다us.. 2026. 1. 8.
Yarn Berry Yarn berry를 도입하게 된 계기는 특정 프로젝트에 노드 버전이 명시되어있지 않아 CI/CD 환경 설정에서노드 버전을 설정 후 빌드할 때 난항을 겪었습니다. (계속된 의존성 버전 충돌)그래서 node 최신 안정화 버전으로 셋팅하는걸로 인프라팀과 논의 후 작업하는데 프로젝트에 내장된 패키지 버전을 마이그레이션하는 작업을 진행했습니다.하지만 특정 패키지의 구버전을 캐싱하고 있는 파일을 모두 제거하고 재설치해도 계속 어디선가 구버전을 강제 설치하고 있어 해결을 위해 패키지 관리 관련 문서를 찾아보았고 Yarn berry(v2)를 도입하게 되었습니다. Yarn BerryYarn Berry는 Yarn 2.0 이상 버전을 지칭하는 별칭입니다.기존에 사용하던 Yarn v1은 node_modules 구조를 사용했.. 2025. 5. 30.
[Mac] Pod 설치 오류 해결기 맥북을 구매해서 pod를 설치하는데 Cocoapod를 먼저 설치했어야 했다 sudo gem install cocoapods The last version of securerandom (>= 0.3) to support your Ruby & RubyGems was 0.3.2. Try installing it with `gem install securerandom -v 0.3.2` and then running the current command again securerandom requires Ruby version >= 3.1.0. The current ruby version is 2.6.10.210. 먼저, Ruby는 객체 지향 프로그래밍 언어이고 Cocoapod는 Ruby로 작성된 Ruby gem 이.. 2025. 1. 27.
[VSCode] 커밋하지 않을 파일 관리, 로컬에서만 Ignore 시키기 개발 환경---------------------------------OS : Mac개발 툴 : VsCode개발 언어 : javascript---------------------------------Please clean your repository working tree before chekout VSCode를 사용한지 얼마 안되어서 넘 낯설다;IntelliJ에서는 서버에 올리지 않고 나만 사용할 파일을 변경 이력 유형을 하나 더 추가해서 관리할 수 있는데 VSCode에서는 이게 안된다. 변경 이력이 아직 commit되기 전 상태에서 pull을 받을 수 없다. 프로젝트 루트 레벨에서 .git/info/exclude 파일에 파일을 추가해주면 된다고 하는데 나는 이 방법이 안된다 ㅠ 그래서 찾은 방법커밋하지.. 2024. 12. 30.
[Android] OutOfMemory 오류 해결, OOM 개발 환경---------------------------------OS : Mac개발 툴 : Android Studio개발 언어 : KotlintargetSdk : 34minSdk : 24--------------------------------- 오류 내용 java.lang.OutOfMemoryError: Failed to allocate a 64 byte allocation with 122576 free bytes and 119KB until OOM, target footprint 268435456, growth limit 268435456; giving up on allocation because  ExoPlayer 에서 영상을 재생하다 급발진으로 앱이 다운되었다.오류 내용은 간단하다. 메모리가 .. 2024. 12. 18.
[Xcode]CocoaPod 라이브러리 추가 오류: Not Found libarclite_iphoneos ---------------------------------OS : Mac개발 툴 : xcode개발 언어 : Swiftxcode version : 15.0.1min iOS version : 14.3.1--------------------------------- File not found: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a CocoaPod에 라이브러리 하나 추가하고 실행했더니 위와 같은 오류가 발생했다 이 오류는 왜 발생하는거지.. 다른 사람들은 Xcode 14.3 버전부터 갑자기 발생했다지만 난 14.3버전 쓴지 좀 오래됐다.좀 .. 2024. 12. 17.
[Android] Gradle 버전 업그레드 이슈 : Namespace not specified. 개발 환경---------------------------------OS : Mac개발 툴 : Android Studio개발 언어 : KotlintargetSdk : 34minSdk : 24--------------------------------- Gradle 버전을 7.2.1 버전을 사용하고 있었는데 라이브러리 업데이트를 위해 8 버전으로 업데이트 하려한다.프로젝트 레벨의 build.gradle에서 Gradle 버전을 업데이트 후 sync를 돌리니 아래와 같은 오류가 발생했다 Namespace not specified. Specify a namespace in the module's build file. See https://d.android.com/r/tools/upgrade-assistant/s.. 2024. 11. 4.