티스토리

공부
검색하기

블로그 홈

공부

codingstudy95.tistory.com/m

김검정 님의 블로그입니다.

구독자
1
방명록 방문하기

주요 글 목록

  • 기능은 됐는데 성능이 안 나오는 코드의 특징 5가지 코드는 돌아가기만 하면 되는 거 아니야?? 라는 생각을 처음엔 했었다. 하지만 서비스가 커지고 사용자 수가 늘어나거나, 잘못된 로직으로 인해 장애, 운영 비용 증가, 사용자 이탈로 이어지게 된다. 그래서 개발자는 기능과 성능을 동시에 잡는 코드를 짤 줄 알아야 한다. 그럼 성능이 안나오는 코드는 어떤 특징을 가지고 있는지 알아보자 1. 데이터 구조를 무시한 코드일을 하다보면 무의식적으로 무조건 List에 담고 for문을 돌리는 경우가 있다. 그러다 해시맵을 써야 할 곳에 배열을 쓰게 되는 경우가 발생한다. 이렇게 되면 검색, 삽입, 삭제할 때 시간 복잡도가 폭발하게 된다.// 10,000건 데이터 중에서 특정 ID 찾기for (User user : userList) { if (user.getId(.. 공감수 0 댓글수 0 2025. 5. 9.
  • Oracle SQL Developer 에서 쿼리 계획(EXPLAIN PLAN) 보는 방법 쿼리 계획이란?쿼리 계획(Execution Plan)은 오라클 데이터베이스가 SQL 문장을 실행할 때 "어떤 방법으로 데이터를 읽고 처리할지" 미리 계산해서 보여주는 설명서이다. 즉,테이블을 풀스캔할지?인덱스를 탈지?조인을 어떤 순서로 할지? 등을 알려주는 실행 청사진이다. 이걸 보면 쿼리 성능 문제를 미리 예측하거나 최적화할 수 있다. SQL Developer에서 Explain Plan 확인하는 기본 방법SQL Developer 실행오라클 DB에 로그인쿼리 작성 ex) SELECT * FROM employees WHERE department_id = 10;쿼리 블록을 드래그하거나 선택한 후, 상단 메뉴에서 Explain Plan(F10) 버튼 클릭 또는 오른쪽 클릭 → Explain Plan 선택 .. 공감수 0 댓글수 0 2025. 5. 7.
  • DB Connection Pool 고갈이 되면 무슨 일이 벌어질까? 대부분의 웹 애플리케이션은 DB Connection Pool을 사용한다. DB 커넥션 풀 덕분에 동시 사용자 요청을 빠르게 처리할 수 있다. 하지만 어느 순간, 예상치 못한 상황이 발생한다. 그 순간중 하나가 바로 커넥션 풀 고갈(Connection Exhaustion) 이다. DB 연결 대기 시간이 급격히 증가한다요청이 지연된다최악의 경우 애플리케이션 전체가 다운된다. 그렇다면 DB Connection Pool에 대해서 알아보자. DB Connection Pool 이란?DB 연결(Connection)을 매번 새로 열고 닫으면 비용이 크기 때문에, 일정 수의 커넥션을 미리 생성해 풀(pool)에 담아두고 재사용하는 구조이다. 특징설명커넥션 생성 비용 절감연결이 미리 준비되어 빠른 응답 가능커넥션 수 제.. 공감수 0 댓글수 0 2025. 5. 5.
  • 할머니도 이해할 수 있는 자바 Thread Thread에 대해서 오래전에 정리했던 적이 있다. 하지만 일을 하다가.. 아직도 Thread에 대해서 잘모른다는 느낌이 들어서 더 자세하게 다시한번 정리를 하고자 한다. https://codingstudy95.tistory.com/67 스레드사전적 의미로 한 가닥의 실이라는 뜻으로 한가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어놓았다고 해서 유래된 이름이다. 하나의 스레드는 하나의 코드 실행 흐름이므로codingstudy95.tistory.com  스레드란 무엇인가!!?자바에서 Thread(스레드)는 프로그램 내에서 동시에 실행되는 작업의 단위를 의미한다. 회사에서 여러 사람이 각자의 다른 일을 동시에 하는 것과 마찬가지로, 스레드는 하나의 프로그램 안에서 여러 작업을 동시에 처리할 .. 공감수 1 댓글수 0 2025. 5. 1.
  • ArrayList vs LinkedList -add 시간복잡도와 메모리 사용 차이(Kotlin / Java) 개발을 하다 보면 ArrayList를 쓸지, LinkedList를 쓸지 고민할 때가 많다. 특히 데이터를 추가할 때(add), 성능이나 메모리 측면에서 어떤 차이가 있는지 정확하게 이해하고 있으면, 더 좋은 성능을 만들 수 있을 것 같아서 정리해본다. 1. ArrayList 내부적으로 배열(Array) 기반으로 데이터를 저장하는 컬렉션이다.데이터가 추가되면서 배열 크기를 초과하면, 더 큰 배열을 새로 만들고 기존 데이터를 복사한다.val arrayList = ArrayList()arrayList.add(10) // 배열에 10 추가 특징 : 인덱스를 통한 접근 ( get(index) ) 이 매우 빠름 → O(1)중간 삽입/삭제는 느림 → O(N) (요소 이동 발생) 2. LinkedList노드(Node).. 공감수 2 댓글수 0 2025. 4. 30.
  • Kotlin 연습하기(13) - 분할 정복 알고리즘 분할 정복 알고리즘의 기본 개념분할 정복의 핵심 아이디어는 분할 정복 이름 그대로 '분할(Divide)', '정복(Conquer)', '결합(Combine)' 의 세 단계로 이루어져 있다.분할 : 큰 문제를 여러 개의 작은 문제로 나눈다.정복 : 나눈 작은 문제들을 각각 해결한다.결합 : 해결한 결과를 합쳐서 전체 문제의 답을 만든다.쉽게 설명하면 큰 케이크를 한 번에 먹으려 하면 힘들지만, 조각조각 나눠서 먹으면 쉬운것과 비슷하다.  분할 정복의 대표 알고리즘으로는 병합 정렬과 퀵 정렬이 있다.  1. 병합 정렬(Merge Sort)병합 정렬은 배열을 반으로 나누고, 각각을 정렬한 뒤, 두 정렬된 배열을 합쳐서 전체 배열을 정렬하는 방법이다. 멀쩡히 있는 배열을 왜 쪼갤까? 배열을 작게 나누면, 작은 .. 공감수 0 댓글수 0 2025. 4. 30.
  • Kotlin val 은 왜 값이 변하는가?? Kotlin을 공부중인데 val에 대해서 글을 읽던 중 엥? 이게 무슨 말이지 하는 부분이 있었다. 분명 "val 로 선언하면 값을 바꿀 수 없다" 라고 봤는데, val로 선언했는데 객체 내부 값이 변하는걸 목격했다. 분명히 고정된 값(val)인데 왜 내부 데이터는 바뀌는건지 혼란스러웠다. 이건 Kotlin이 값을 불변하게 만든다고 오해한 데서 시작된 착각이라는 것을 알았다. 진짜로 불변(Immutable)한 것은 "참조(reference)" 이지, "객체의 상태(state)" 가 아니다. 1. Kotlin의 val 과 var 기본 개념먼저, Kotlin의 val 과 var 는 변수 선언 방식이다.키워드의미val읽기 전용(Read-only) 참조var읽기/쓰기(Read-Write) 참조 val 은 참조.. 공감수 0 댓글수 0 2025. 4. 28.
  • 면접 예상 질문과 답변 Q1: JWT 기반 인증 방식의 장점과 구현 방법에 대해 설명해 주세요.A1:"JWT(JSON Web Token)는 상태 정보를 서버에 저장하지 않는 stateless 인증 방식으로, 확장성과 성능 면에서 유리합니다. 토큰은 헤더, 페이로드, 서명으로 구성되며, 클라이언트에게 발급된 토큰을 요청 시 함께 전송하여 인증을 수행합니다. Spring Security와 함께 JWT 필터를 구현해 토큰의 유효성을 검사하고, 인증 정보를 설정하는 방식으로 구현할 수 있습니다."  Q2: Kotlin의 주요 특징과 Spring Boot와의 통합에서의 이점에 대해 설명해 주세요.A2:"Kotlin은 간결한 문법, Null 안전성, 데이터 클래스, 확장 함수, 람다 및 고차 함수 등 다양한 기능을 제공하여 코드의 가독성.. 공감수 1 댓글수 0 2025. 4. 28.
  • Kotlin 연습하기(12) - 해시 테이블 데이터를 빠르게 검색하거나 저장하는 일은 개발에서 필수적이다. (항상 이걸 어떻게 하면 잘할까 고민한다..) 이러한 작업을 가장 효율적으로 수행하는 자료구조 중 하나가 바로 해시 테이블(Hash Table) 이다. 해시 테이블은 키-값(Key-Value) 쌍으로 데이터를 저장하며, 거의 상수 시간(평균 O(1))에 데이터에 접근할 수 있는 강력한 도구이다.  해시 테이블이란?해시 테이블은 위에서 언급한것과 같이 키(key)와 값(value)의 쌍으로 데이터를 저장하는 구조이다. 여기서 중요한 개념은 해시 함수(hash function)로, 입력된 키를 고정된 크기의 인덱스로 변환한다. 이 인덱스는 데이터를 저장할 배열의 위치를 결정한다. 예를 들어 "apple"이라는 키를 입력하면, 해시 함수는 "app.. 공감수 0 댓글수 0 2025. 4. 25.
  • AI 시대 개발자를 위한 운영체제 필수 개념정리 운영체제를 모르는 개발자는 땅의 구조를 모른 채 건물을 짓는 사람과 같다. 실무에서 메모리 부족, CPU 점유율 급등, 스레드 병목 같은 문제를 처음 만났을때 대부분 이렇게 느낀다. 운영체제(OS)란?운영체제는 컴퓨터 하드웨어와 소프트웨서 사이에서 통역사 역할을 하는 프로그램이다. 우리가 작성한 코드가 실제 컴퓨터에서 "언제", "어떻게" 실행될지 결정하는 건 바로 이 운영체제다. 운영체제가 하는 일 : 프로그램이 CPU를 사용할 수 있도록 순서 정하기(스케줄링)여러 프로그램이 동시에 돌아가도 문제없게 메모리 나눠쓰기파일을 읽고 쓰는 걸 도와주는 파일 시스템 관리사용자와 하드웨어 장치(키보드, 프린터 등) 사이 중재 운영체제 핵심 개념 5가지 1. 프로세스 vs 스레드구분프로세스스레드정의실행 중인 프로그.. 공감수 3 댓글수 5 2025. 4. 23.
  • Kotlin 연습하기(11) - 투 포인터와 슬라이딩 윈도우 알고리즘 투 포인터란 무엇일까?투 포인터 기법은 배열이나 리스트 등에서 두 개의 인덱스(포인터)를 사용하여 문제를 해결하는 알고리즘이다. 주로 정렬된 배열에서 조건에 맞는 쌍을 찾거나, 두 포인터를 이용해 특정 구간을 탐색할 때 유용하다.  슬라이딩 윈도우란 또 무엇일까?슬라이딩 윈도우는 연속된 구간(윈도우)을 다루는 기법으로, 한 번에 한 구간씩 보면서 원하는 조건(예: 합, 평균, 최대/최소값 등)을 만족하는 최적의 결과를 찾는 방법이다.이때 "윈도우"는 배열이나 문자열에서 연속된 부분을 의미하며, 이 윈도우를 한칸씩 옮겨가며 문제를 해결한다.  이해가 잘 안된다 실생활 비유? or 더 쉬운 비유로 한번 이해를 해보자. 투 포인터 비유 : 책의 양쪽 끝에서 찾기생각해보자  한 권의 책에서 특정 단어를 찾으려고.. 공감수 0 댓글수 2 2025. 4. 23.
  • 프로그래머스 (기초) - 5명씩 https://school.programmers.co.kr/learn/courses/30/lessons/181886 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 프로그래머스 기초레벨의 5명씩 문제를 한번 풀어봤다. class Solution { fun solution(names: Array): Array { val result = mutableListOf() for (i in names.indices step 5) { result.add(names[i]) } return result.toTypedArray() }} 코드 .. 공감수 0 댓글수 0 2025. 4. 18.
  • Spring Boot 관련 5가지 예상질문 및 답변 Q1: Spring Boot에서 의존성 주입(Dependency Injection)이란 무엇이며, 왜 중요한가요?A1:"의존성 주입은 객체 간의 의존 관계를 애플리케이션 외부에서 주입하여 관리하는 디자인 패턴입니다. Spring Boot에서는 IoC(Inversion of Control) 컨테이너가 이를 담당하며, @Autowired, @Component, @Service 등 애노테이션을 통해 Bean을 자동 등록 및 관리합니다. 이를 통해 결합도를 낮추고, 테스트 및 유지보수를 용이하게 할 수 있습니다."  Q2: Spring Boot의 Auto Configuration 기능에 대해 설명해 주세요.A2:"Spring Boot의 Auto Configuration은 클래스패스에 포함된 라이브러리와 설정 파.. 공감수 0 댓글수 0 2025. 4. 16.
  • Spring Boot 의존성 주입 (Dependency Injection) 의존성? 의존성이 뭘까?어떤 물건을 만들거나 사용할 때 다른 것이 꼭 필요할때 우리는 그것을 의존한다고 한다.예를 들어 자동차는 엔진이 꼭 필요하다.자동차는 혼자서는 움직일 수 없다.반드시 엔진이 있어야 움직일 수 있다.즉 자동차는 엔진에 의존하고 있다고 말할 수 있다.이처럼 어떤 객체가 다른 객체를 필요로 할 때, 의존성이 있다고 말한다. 그렇다면 의존성 주입(Dependency Injection) 이란 무엇일까? 만약 자동차가 엔진을 직접 만들 필요 없이, 공장에서 엔진을 가져와 조립할 수 있다면 더 편리하지 않을까?? >>> 이것이 의존성 주입니다. 쉽게 말해자동차(클래스)는 엔진을 직접 만들지 않음필요한 엔진을 공장에서(스프링)  가져옴스프링이 자동차에 엔진을 자동으로 넣어줌(의존성 주입)! 오호.. 공감수 1 댓글수 2 2025. 4. 16.
  • Kotlin 연습하기(10) - 그리디 알고리즘 1. 그리디 알고리즘의 정의그리디 알고리즘은 문제를 해결할 때 현재 상황에서 가장 최선의 선택을 하여 최종 해답을 도출하는 방법이다. 이 때, 각 단계마다 선택하는 것이 최적해를 보장하는 경우에만 효과적이다.  2. 국부 최적 선택(Local Optimal Choice) 이란??국부 최적선택이란 각 단계에서 당장 가장 이득이 큰 선택을 하는 것을 의미한다. 예를 들어, 쇼핑할 때 할인율이 가장 높은 상품을 먼저 고르는 것과 비슷하다.  3. 그리디 알고리즘의 장단점장점 : 구현이 단순하고 빠르며, 계산 비용이 적다.문제의 크기가 커져도 각 단계의 선택만 고려하면 되므로 효율적이다.단점 : 매 순간 최선의 선택이 전체 최적해를 보장하지 않을 수 있다.문제에 따라 그리디 알고리즘이 최적해를 찾지 못하는 경우.. 공감수 1 댓글수 2 2025. 4. 14.
  • Kotiln 연습하기(9) - DFS / BFS 그래프(Graph)란 무엇일까?그래프는 정점(Vertex)와 간선(Edge)으로 구성된 자료구조이다. 정점(Vertex) : 그래프의 구성요소로, 사람이나 도시처럼 개별 요소를 나타낸다.간선(Edge) : 정점들을 연결하는 선이다. 두 정점 사이의 관계(예:도로, 친구 관계)를 나타낸다.예시 : 학교에서 여러 학생(정점)들이 친구 관계(관선)를 맺고 있는 것을 그래프로 생각할 수 있다. 그래프의 표현 방법그래프를 컴퓨터에서 표현하는 방법에는 여러 가지가 있다. 가장 일반적인 두 가지 방법은 인접 리스트와 인접 행렬이다.인접 리스트(Adjacency List) : 각 정점에 연결된 정접들의 리스트를 저장한다.       예시0: [1, 2]1: [0, 3]2: [0, 3]3: [1, 2] 인접 행렬(Adj.. 공감수 1 댓글수 1 2025. 4. 11.
  • 백엔드 개발자도 알아야 하는 브라우저 캐시의 브라우저 캐시는 단순히 프론트엔드의 영역이 아니라, 실제 서비스의 성능과 트래픽 비용, 심지어 버그 발생 가능성까지 영향을 미치는 아주 중요한 요소이다. 브라우저 캐시란?브라우저 캐시는 클라이언트(사용자의 웹 브라우저)가 자주 사용하는 데이터를 저장해두고, 다음에 다시 요청할 때 빠르게 보여주기 위한 기술이다. 예 : 어떤 쇼핑몰 사이트에 방문시, 그 사이트의 로고 이미지가 매번 서버에서 오면 느릴것이다. 그래서 브라우저는 이걸 한 번 다운로드한 뒤, 다음부터는 자기 컴퓨터에 저장된걸 보여준다. 브라우저 캐시의 핵심 메커니즘 1. Cache-Control서버가 클라이언트에게 이 리소스를 어떻게 캐시해야 할지 알려주는 HTTP 헤더이다.max-age=3600 -> 1시간 동안 캐시해라public -> .. 공감수 0 댓글수 1 2025. 4. 9.
  • 쿠버네티스 네트워크 요즘 인스타 광고글이나 여러 블로그 포스팅등등 여러 곳에서 쿠버네티스라는 용어를 자주 접했다. 저게 뭘까...? 처음엔 네카라쿠배인줄..  쿠버네티스 그게 도대체 뭐야? 쿠버네티스란?쿠버네티스는 컨테이너화된 애플리케이션을 여러 대의 컴퓨터(서버)에 효율적으로 배포하고 관리할 수 있도록 돕는 도구이다. 컨테이너?는 뭘까?컨테이너는 애플리케이션과 그에 필요한 라이브러리, 설정 파일 등을 한데 묶어 어디서든 똑같이 실행할 수 있도록 만든 작은 가상화 기술이다. 쿠버네티스에서는 하나 이상의 컨테이너를 묶어서 Pod라고 부른다. 쉽게 말해, Pod는 애플리케이션의 한 부분으로, 내 앱이 실제로 살아있는 단위라고 생각하면 된다. 네트워크적 관점에서 쿠버네티스는 Pod가 서로 통신할 수 있는 가상 네트워크 환경을 제.. 공감수 0 댓글수 0 2025. 4. 8.
  • Kotlin 연습하기(7) - 동적 계획(DP) 동적 계획법(Dynamic Programming, DP) - DPDP란 무엇일까? 동적 계획법은 큰 문제를 여러 개의 작은 문제로 나누어 해결한 후, 그 결과를 저장하여 전체 문제를 효율적으로 해결하는 방법이다. 예를 들어, 큰 퍼즐을 맞출 때, 각 조각을 따로 기억해둔다면 다시 같은 조각을 찾지 않아도 된다.  DP의 핵심 개념부분 문제(Overlapping Subproblems) : 큰 문제를 해결하는 과정에서 동일한 작은 문제가 여러 번 반복되는 경우가 있다.최적 부분 구조(Optimal Substructure) : 문제의 최적해가 그 하위 문제들의 최적해로 구성될 수 있을 때, DP를 적용할 수 있다.  대표 문제 : 계단 오르기 - 문제 설명 : 계단이 총 n개 있고, 한 번에 1계단 또는 2계.. 공감수 0 댓글수 0 2025. 4. 7.
  • 오라클 날짜별 조회 대부분의 테이블에 날짜 데이터가 등록된 컬럼이 있을 것이다. 날짜별로 그룹화 하여 조회하려면 어떻게 해야할까?? 1. TRUNC 함수 사용TRUNC 함수를 사용하면 날짜별로 잘라낼 수 있다. * 월 단위로 자르는 예시SELECT TRUNC(REG_DT, 'MM') AS month_start, COUNT(*) AS cntFROM your_tableGROUP BY TRUNC(REG_DT, 'MM')ORDER BY month_start;이 쿼리는 REG_DT의 월의 첫 날(예: 2024-08-01) 기준으로 그룹화하여 각 월에 해당하는 데이터 건수를 보여준다. 2. TO_CHAR 함수 사용 날짜를 원하는 형식(예: 'YYYY-MM')으로 변환하여 그룹화할 수도 있다.SELECT TO_CHAR(REG.. 공감수 0 댓글수 0 2025. 4. 7.
  • Spring Boot와 WebSocket 을 이용한 실시간 통신 시스템 구축해보기 실시간 통신은 채팅, 알림, 게임. 금융 거래 등 다양한 분야에서 핵심 기술로 사용된다. 예를 들어, 소셜 미디어에서 친구가 게시물을 올릴 때 실시간 알림이 전송되는 경우, WebSocket을 통해 효율적으로 구현할 수 있다. 추후에 어떤 서비스를 구현해 볼지 모르기 때문에 한번 관련된 내용을 정리해두자 기본 개념을 먼저 이해해보자  1. HTTP 프로토콜HTTP(HyperText Transfer Protocol)는 웹의 기본 통신 프로토콜이다. 요청-응답 구조 : 클라이언트가 요청하면 서버가 응답단발성 연결 : 요청 후 연결 종료비상태성 : 각 요청이 독립적위처럼 HTTP의 한계는 실시간 상호작용에 적합하지 않다는 점이다. 실시간 데이터 전송이나 서버의 지속적인 이벤트 알림은 HTTP만으로 구현하기 어.. 공감수 1 댓글수 1 2025. 4. 7.
  • Kotlin 연습하기(6) - 선형/이진 검색 검색 알고리즘이란 무엇일까?검색(Searching)은 배열이나 리스트 같은 데이터 집합에서 특정 값(또는 조건에 맞는 요소)을 찾아내는 과정이다.예를 들어, 반에서 학생들 이름이 적힌 명단이 있을 때 "철수"라는 이름을 찾는 것과 비슷하다. 왜 검색이 필요할까?데이터 찾기 : 많은 데이터 중에서 필요한 정보를 빠르게 찾기 위해 사용된다.알고리즘 문제 : 코딩 테스트에서 특정 값을 찾는 문제가 출제된다.효율성 : 올바른 검색 알고리즘을 사용하면 데이터의 양이 많더라도 빠른 시간 안에 원하는 값을 찾을 수 있다.  1. 선형 검색(Linear Search)배열의 첫 번째 요소부터 순서대로 하나씩 검사하면서 찾고자 하는 값과 일치하는지 확인한다. 특징 간단하고 구현하기 쉽다데이터가 정렬되어 있지 않아도 사용할.. 공감수 0 댓글수 0 2025. 4. 4.
  • 오라클 ORA-00054 : 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다. 컬럼 삭제 중 해당 에러가 떴다.  원인테이블이 다른 세션에서 사용 중이다.다른 사람이 테이블에 대해 SELECT나 UPDATE를 하고 있거나, 트랜잭션이 열려 있어서 락이 걸려 있는 상태이다. Oracle은 ALTER TABLE 같은 DDL 문장을 실행할 때 해당 테이블에 대해 exclusive lock을 걸려고 시도하는데, 이미 누군가 쓰고 있다면 그 락을 못 걸고 에러가 난다. 누군가 테이블을 사용하고 있군...   해결 방법잠깜 기다렸다가 다시 시도 : 누군가 사용하고 있다는건 일시적인 현상이므로 가장 직관적인  해결 방법인것 같다.락 걸린 세션 확인하기(DBA 권한 필요)락 잡고 있는 세션 종료(주의! 꼭 필요한 경우에만 진행한다.)* 락 걸린 세션 확인 쿼리SELECT l.session_id.. 공감수 0 댓글수 0 2025. 4. 3.
  • Kotlin 연습하기(5) - 버블정렬 정렬이란 무엇일까?정렬(sorting)은 데이터 (예: 숫자, 문자열 등)를 일정한 순서대로 나열하는 과정이다. 예를 들어, 시험 점수가 섞여 있을 때 낮은 점수부터 높은 점수 순서대로 정렬하면, 누구의 점수가 가장 낮고 누구의 점수가 가장 높은지 쉽게 알 수 있다. 왜 정렬이 필요할까?검색 : 정렬된 데이터를 빠르게 검색할 수 있다.분석 : 데이터를 정리해서 보고서나 그래프로 만들 때, 정렬된 상태가 더 유용하다.문제 해결 : 코딩 테스트나 알고리즘 문제에서 정렬은 자주 사용되는 기본 기술이다. 버블 정렬(Bubble Sort) 이해하기 버블 정렬의 원리 버블 정렬은 인접한 두 개의 원소를 비교하여 순서가 맞지 않으면 서로 교환한다.한 번의 반복(패스)마다 가장 큰 값이 맨 뒤로 이동하게 된다.이 과정.. 공감수 0 댓글수 0 2025. 4. 2.
  • Kotlin 연습하기(4)-재귀함수 재귀 함수란 무엇일까?재귀 함수란 자기 자신을 호출하는 함수이다. 즉, 문제를 해결하기 위해 동일한 문제의 더 작은 버전을 반복해서 호출하는 방식이다. 재귀 함수의 구성 요소기본 조건(Base Case) : 재귀 호출을 멈추는 조건이다. 기본 조건이 없으면 함후가 무한히 자기 자신을 호출하게되는 무한루프에 빠지게 된다.재귀 호출(Recursive Case) : 문제를 더 작은 문제로 나누어 자기 자신을 호출하는 부분이다.  재귀 함수 예제1. 팩토리얼 계산(n!)fun factorial(n: Int): Int { // 기본 조건: n이 0이면 1 반환 if (n == 0) { return 1 } // 재귀 호출: n * (n-1)! 계산 return n * fact.. 공감수 0 댓글수 0 2025. 3. 31.
  • Kotlin 연습하기(3) 문자열이란?문자열(String) 이란 여러 문자가 이어진 데이터이다. 예를 들어, "Hello, Kotlin!" 은 하나의 문자열이다. 문자열에서 인덱스 (Index)도 중요한데 인덱스란 문자열의 각 문자의 순서를 나타내며, 첫 번째 문자는 0번 인덱스이다.val text = "Hello"println(text[0]) // 출력: Hprintln(text[1]) // 출력: e Kotlin에서는 문자열을 다루기 위한 다양한 내장 함수를 제공한다.reversed() : 문자열을 뒤집는다.length : 문자열의 길이를 반환한다.contains() : 특정 문자가 포함되어 있는지 확인한다. 리턴값은  true / falsesplit() : 문자열을 특정 구분자로 나눈다.fun main() { val t.. 공감수 0 댓글수 0 2025. 3. 27.
  • Jar 파일과 War 파일의 차이점 및 활용법 Java 기반 프로젝트를 배포할 때 자주 사용하는 Jar 파일과 War 파일이 있다. 누군가는 War 파일로 달라고 하고, 누군가는 Jar 파일로 달라고 한다. 두 파일의 차이점은 무엇이고 어떨때 활용하면 좋을까? Jar, War 모두 패키징이다. 여기서 패키징은 단순히 파일을 압축하는 것이 아니라, 실제 애플리케이션을 실행 가능한 형태로 만들어 주는 매우 중요한 단계이다. 연인에게 줄 선물을 박스째로 주는 것보다 예쁘게 포장해서 주면 더 좋은것과 마찬가지이다. 소프트웨어도 Jar 파일이나 War 파일과 같은 포맷으로 잘 포장되어 있어야, 다른 개발자나 운영자가 쉽게 사용하고 배포할 수 있다. Jar 파일(Java Archive)Jar 파일은 Java 애플리케이션을 패키징하는데 사용되는 파일 형식이다. .. 공감수 1 댓글수 0 2025. 3. 26.
  • Kotlin 연습하기(2) Kotlin에서는 fun 키워드를 사용하여 함수를 정의한다. 예를 들어, 두 숫자를 더하는 함수를 작성해보자// 두 숫자를 더하는 함수 정의fun add(a: Int, b: Int): Int { return a + b}fun main() { val sum = add(10, 20) println("10과 20의 합: $sum") // 출력: 30} 이런 함수는 다음의 장점을 갖는다.코드 재사용 : 같은 기능이 필요한 경우 함수를 여러 번 호출할 수 있다.모듈화 : 복잡한 문제를 작은 기능 단위로 나누어 작성할 수 있어, 코드 관리가 쉬워진다.가독성 향상 : 함수 이름만 보고 어떤 역할을 하는지 이해할 수 있다. 리스트 (List)리스트는 여러 데이터를 순서대로 저장할 수 있는 자료구조이다.. 공감수 1 댓글수 2 2025. 3. 24.
  • Kotlin 연습하기(1) 변수와 자료형변수 : 정보를 저장하는 상자. 예를 들어, 숫자나 글자, 논리값(true/false)을 저장할 수 있다.자료형 : 변수에 어떤 종류의 값이 들어갈 수 있는지 결정한다.  예시) 정수형 : Int / 실수형 : Double / 문자열 : String / 논리형 : boolean 조건문조건문 (if문) : 주어진 조건이 참이면 특정 코드를 실행하고, 그렇지 않으면 다른 코드를 실행할 수 있다.val score = 85if (score >= 90) { println("합격")} else { println("불합격")}// score가 90 이상이면 "합격"을, 그렇지 않으면 "불합격"을 출력한다.  반복문반목문 (for, while) : 같은 작업을 여러 번 반복할 때 사용한다.for.. 공감수 0 댓글수 0 2025. 3. 21.
  • Spring Boot와 Kolin으로 고성능 백엔드 구축해보기 회사에서 일을 하면서 실제로 대규모 트래픽을 경험해 볼 수는 없다. 끽해야 일일 접속자가 350명 정도..? 사내 서비스라 이용자가 너무 적다.  여러 구인구직 공고를 보면 대부분 대규모 트래픽을 구축해보거나 경험해본 사람들을 우대하는 것을 보고 나 스스로 대규모 트래픽에 관해 여러 문서나 사례등을 바탕으로 대규모 트래픽을 처리하는 방법에 대해 많이 공부해야 된다고 느꼈다. 이 글 하나만 읽어도 대규모 트래픽 환경에서 어떻게 안정적인 시스템을 설계할 수 있는지 확실하게 정리하고자 한다.(나처럼 실제 트래픽을 경험해 본 적이 없더라도 말이다..)  1. 대규모 트래픽이란?대규모 트래픽은 한꺼번에 수많은 사용자가 웹사이트나 애플리케이션에 접속해 데이터를 요청하는 상황을 말한다. 예를 들어, 쇼핑몰의 대규모 .. 공감수 4 댓글수 0 2025. 3. 20.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.