본문 바로가기
728x90

분류 전체보기248

[Kotlin] List와 MutableList 개념 및 차이점 val countryList = listOf("한국","미국","일본")val minusCountryList = countryList - "일본" // "한국", "일본" 값의 Listval plusCountryList = countryList + "중국" // "한국","미국","일본","중국" 값의 List val newlistData = listOf(1, 2, 3)val plusList = listOf(4, 5, 6)newlistData.addAll(plusList) // List 합치기val newlistData2 = plusList1 + plusList2 // + 기호로 합치기val newListData3 = plusList1.plus(plusList2) // plus함수로 합치기val newL.. 2025. 1. 18.
[Spring] 스프링에서 특정 HTTP 응답코드 반환하기 (ResponseEntity, @ResponseStatus) 목차   1. Spring 에서 HTTP 응답상태 코드Spring은 HTTP 응답 상태 코드를 사용자 정의 할 수 있는 다음과 같은 방법을 제공합니다.ResponseEntity 객체 응답@ResponseStatus 어노테이션ResponseStatusException 예외 발생 2. ResponseEntityResponseEntity 인스턴스와 함께 HTTP 응답 상태 코드를 전송할 수 있습니다.예시 코드요청을 통해서 전달 받은 Student 인스턴스를 생성하는 API가 있고, API를 호출했을 때 성공적으로 수행했을 때 Spring에서는 200 응답 코드를 보냅니다.요청을 통해서 전달 받은 Student 인스턴스를 생성하는 API에서 성공적으로 처리가 완료되면 201(CREATED) 응답을 보내고 싶을 .. 2025. 1. 17.
[Kotlin] @NotNull Validation 사용하기 목차   1. Gradle 설정spring-boot-starter-validation 의존성을 명시해야 valid 사용이 가능합니다.implementation 'org.springframework.boot:spring-boot-starter-validation' 2. Valid 사용방법data class ValidRequestDto( @field:NotNull(message = "value는 필수 입력값입니다.") val value: String? = null, @field:NotNull(message = "createdAt은 필수 입력값입니다.") val createdAt: LocalDate? = null, @field:NotNull(message = "number는 .. 2025. 1. 16.
[LeetCode] Valid Parentheses (Python) 1.Quiz2.Solution전형적인 stack 문제. 코드를 깔끔하게 짜도록 연구해야겠다.다른 사람 코드를 보니 괄호를 미리 정의해두고 닫힘 괄호가 나타나면 stack의 마지막 값을 dict 를 사용하여 짝이 있는지 확인하도록했다.class Solution: def isValid(self, s: str) -> bool: parentheses = {"}":"{", "]":"[", ")":"("} stack = [] for char in s: if char in parentheses.keys(): if len(stack) and stack[-1] == parentheses[char]: stack.pop().. 2025. 1. 15.
[LeetCode] RansomNote (Python) 1.Quizhttps://leetcode.com/problems/ransom-note/description/?envType=study-plan-v2&envId=top-interview-150  2.Solutionmagzine 구성 문자로 reansomNote 문자를 만들 수 있는지 true / false 반환하는 문제다른 사람 풀이를 보니 set 을 사용해서 count 개수로 비교하여 ransomNote 가 magazine 보다 많으면 false 를 반환하도록 했다.class Solution: def canConstruct(self, ransomNote: str, magazine: str) -> bool: for char in set(ransomNote): if ra.. 2025. 1. 15.
[LeetCode] Find the Index of the First Occurrence in a String (Python) 1.문제https://leetcode.com/problems/find-the-index-of-the-first-occurrence-in-a-string/description/?envType=study-plan-v2&envId=top-interview-150 2.풀이더 짧은 길이인 needle 문자열이 haystack 에 포함되어있는지 체크이중포문을 돌지않는게 포인트!다른 사람 코드를 보니 index 를 찾는 python method 가 있었다.class Solution: def strStr(self, haystack: str, needle: str) -> int: if needle in haystack: index1 = haystack.index(needle) .. 2025. 1. 15.
[LeetCode] 14.Longest Common Prefix (Python) 1.문제https://leetcode.com/problems/longest-common-prefix/?envType=study-plan-v2&envId=top-interview-1502.풀이1) 주어진 리스트의 원소를 길이순으로 정렬한다.2) 가장 짧은 단어를 기준으로 순환하여 비교한다.3) 반복문을 돌면서 해당 index 의 단어와 첫번째 단어의 index 가 동일한지 체크하고 동일하지 않다면 그 부분까지 substring 해서 반환한다. 3.코드class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if (len(strs) == 0): return "" if (len(str.. 2025. 1. 15.
[LeetCode] Length of Last Word (Python) 1.문제https://leetcode.com/problems/length-of-last-word/description/?envType=study-plan-v2&envId=top-interview-150 2.풀이공백을 기준으로 split 메소드를 사용하면 간단한 문제!  3.코드class Solution: def lengthOfLastWord(self, s: str) -> int: last_word = s.split()[-1] # print(last_word) return len(last_word) 2025. 1. 15.
[LeetCode] Roman to Integer 1.문제https://leetcode.com/problems/roman-to-integer2.풀이dictionary를 이용하여 푸는 문제. 모든 경우의 수를 조합하여 미리 dict 를 만들어도 되고, 주어진 문자열에 대한 값만 dict 로 만들어도된다.[다른사람 풀이]class Solution: def romanToInt(self, s: str) -> int: roman = { "I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000 } res = 0 for i in range(len(s)): if i + 1  3.코드class Sol.. 2025. 1. 14.
Kotlin 예외처리(2) - check(), checkNotNull() 목차   1. check()check()매개변수의 값이 참인지 체크거짓이라면 throwIllegalStateException 예외를 반환합니다.*IllegalStateException-일반적으로 IllegalStateException은 메소드를 호출할 상태(State)가 아닐 때 발생시키는 exception이다. 예시코드fun connect(isConnected: Boolean) { //적용 전 if (isConnected) { throw IllegalStateException("이미 연결되어있습니다.") } //적용 후 check(!isConnected) {"이미 연결되어있습니다."}} 2. checkNotNull()checkotNull()매개변수의 값이 n.. 2025. 1. 13.
[LeetCode] In Subsequence (Python) 1. 문제https://leetcode.com/problems/is-subsequence/description/?envType=study-plan-v2&envId=top-interview-150 2. 풀이문자열 s 가 문자열 t의 subsequence 인지 확인하는 문제!시간 복잡도를 줄이는게 관건인 문제였다. 다른사람 솔루션을 보니 s의 길이 조건을 먼저 체크하고, s 의 pointer 만 확인해서 s 문자열을 다 체크했는지 확인 후 결과를 반환하도록하였다. 2중 포문을 안쓰는 방법 생각하기!!! [다른사람 풀이]class Solution: def isSubsequence(self, s: str, t: str) -> bool: if len(s) > len(t): return False.. 2025. 1. 13.
Kotlin 예외처리 - require(), requireNotNull() 목차   1. require()require()매개변수의 값이 참인지 체크거짓이라면 throw IllegalArgumentException 예외를 반환합니다.*IllegalArgumentException-일반적으로 IllegalArgumentException은 적절하지 않은 인자를 전달했을 때 발생시키는 예외이다. 예시코드fun calculation(val: String?) { //적용 전 if (val.isNullOrEmpty()) { throw IllegalArgumentException("값이 null이거나 공백일 수 없습니다.") } //적용 후 require(!val.isNullOrEmpty()) {"값이 null이거나 공백일 수 없습니다."}} 2. .. 2025. 1. 12.
Kafka 아키텍처 및 동작방식(3)- Consumer, Polling, Rebalancing 목차   1. Consumer란•컨슈머는 컨슈머 API와 이로 구성된 애플리케이션을 의미한다.•일반적으로 컨슈머가 토픽을 구독(subscribe) 또는 읽는다고 한다. •이는 컨슈머가 토픽 파티션에 저장된 메시지들을 가져오는 것을 의미한다.•컨슈머의 특징으로 Polling 구조 / 단일 토픽의 멀티 컨슈밍 / 컨슈밍 그룹이 있다.•이 3가지 특징으로 더욱 효율적이고 유연한 메시지 구독 기능을 제공한다. 2. Polling 구조•컨슈머가 브로커로부터 메시지를 요청하는 polling  구조로 설계되어있다.•즉 컨슈머는 자신이 원하는 만큼의 브로커로 메시지를 요청한다.•장점: 자신의 환경에 메시지 구독 성능을 최적화 할 수 있다. 브로커는 컨슈머의 환경을 고려할 필요가 없다. 3. 단일 토픽의 멀티 컨슈밍•하.. 2025. 1. 10.
Kafka 아키텍처 및 동작방식(2) - Producer, Message, Option 목차   1. Producer란•메시지를 생산해서 카프카의 토픽으로 메시지를 보내는 애플리케이션 서버•프로듀서의 주요 기능은 각각의 메시지를 토픽 파티션에 매핑하고 파티션의 리더에 요청을 보내는 것이다•키 값을 정해 해당 키를 가진 모든 메시지를 동일한  파티션으로 전송 ( 키를 입력하지 않으면 라운드 로빈 방식으로 균등 분배 )  2. send()로 메시지 보내는 방법1) 메시지 보내고 확인하지 않기프로듀서에서 서버로 메시지 보내고 성공적으로 도착했는지 확인하지 않음메시지 손실 가능성이 있어 일반적인 서비스 환경에서는 사용하지 않음 2) 동기 전송메시지를 보내고 send() 메소드의 future 객체를 리턴get() 메소드로 Future를 기다린 후 send()가 성공했는지 확인에러가 없으면 Recor.. 2025. 1. 9.
Kafka 아키텍처 및 동작 방식(1) - Partition, Offset, Broker 목차 1. Kafka 아키텍처 Kafka는 producer가 topic에 데이터를 넣으면 consumer가 가져가는 구조이다.Topic은 데이터가 저장되는 공간으로 어떤 데이터를 담을지 명시하는게 좋다.Ex) click_log, send_sms, location_log 등.. 2. Kafka Partition토픽마다 1개 이상의 파티션 존재빠른 전송을 위해서는 병렬로 처리되어야 하며 이를 위해서 토픽 내에 여러 파티션이 필요하다.파티션 수는 증가시킬 수 있지만 줄일 수 없다. -> 줄일려면 토픽을 삭제해야 한다.따라서 파티션 수를 무작정 늘리기보다는 적절한 값으로 설정한다.적은 수의 파티션으로 운영하다가 프로듀서 또는 컨슈머에서 병목현상이 발생하면 조금씩 늘려가는 방식을 권장   3. Offset 파티션.. 2025. 1. 8.
Kafka 주요 용어 정리 1)EventEvent 는 kafka에서 Producer와 Consumer가 데이터를 주고받는 단위이다. 이벤트 또는 메시지라고 한다. 2)Producer (Publisher)Producer는 kafka에 이벤트를 게시(post)하는 클라이언트 어플리케이션을 의미한다. Publisher라고도 하며 메시지를 보내는 쪽이다. 3)Consumer (Subscriber)Consumer는 이러한 Topic을 구독하고 이로부터 얻어낸 이벤트를 처리하는 클라이언트 어플리케이션이다. Subscriber라고도 하며 메시지를 수신하는 쪾이다. 4)Topic이벤트가 쓰이는 곳이다. Producer는 이 Topic에 이벤트를 게시한다. 그리고 Consumer는 Topic으로부터 이벤트를 가져와 처리한다. Topic은 파일시스.. 2025. 1. 5.
Kafka 구조 및 구성 요소, Pub/Sub 모델 목차   1. Pub/Sub 모델카프카는 Pub-Sub 모델이다. 여기서 Pub-sub 모델이란 무엇일까?Publish - Subscribe (발행/구독) 모델은 메세지를 특정 수신자에게 직접적으로 보내주는 시스템이 아니다.Publisher는 메시지를 topic(어떠한 집단을 말함)을 통해서 카테고리화 한다.분류된 메시지를 받기 원하는 receiver는 그 해당 topic을 구독(subscribe)함으로써 메시지를 읽어 올 수 있다.publisher는 topic에 대한 정보만 알고 있고, 마찬가지로 subscriber도 topic만 바라본다.즉, 데이터를 관리하는 Kafka 서버를 사이에 끼고 데이터를 넣는 publisher와 데이터를 읽는 subscriber는 각자의 업무만 kafka 서버를 통해 수.. 2025. 1. 4.
Kafka 기본 개념 및 의미 목차   1. Kafka 란   •데이터 파이프라인(Data Pipeline)을 구축할 때 가장 많이 고려되는 시스템 중 하나가 '카프카(Kafka)’ 이다. •아파치 카프카(Apache Kafka)는 링크드인(LinkedIn)에서 처음 개발된 분산 메시징 시스템이다. •카프카는 분산 스트리밍 플랫폼으로 대용량의 실시간 로그처리에 특화되어 있는 솔루션이다.•데이터를 유실없이 안전하게 전달하는 것이 주목적이다.•클러스터링이 가능하므로 Fault-Tolerant한 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리한다.•Pub-sub 모델의 메시지 큐 구조이다. 2. Kafka 특징Publisher Subscriber 모델 Publisher Subscriber 모델은 데이터 큐를 중간에 두고 서로 간 독립적.. 2025. 1. 3.
[Linux] netstat 명령어로 서버간 파일 전송하기 목차   1. netstat 명령어netstat은 network statistics 의 약자로 네트워크 상태와 열려있는 포트에 관해 확인 할 수 있습니다.전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스, 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 도구입니다.netstat 명령어의 옵션들은 아래와 같습니다.  상태값 의미StatusContentLISTEN연결 요구를 기다리는 상태. 포트가 열려있음ESTABLISHED서로 연결되어 있는 상태SVN_SENT클라이언트가 서버에 요구(SYN) 패킷을 보내고 연결을 요청한 상태SVN_RECV서버가 클라이언트로부터 접속 요구(SYN)을 받아 클라이언트에게 응답(SYN/ACK)하였지만, 아직 클라이언트에게 확인 메시지(ACK)는 받지 .. 2024. 7. 14.
[MySQL] PK 컬럼 순서와 Index 목차   1. PK 컬럼 순서의 중요성인덱스 구성에서 의도하지 않은 순서의 Primary Key Unique Index가 생성됩니다.많은 인덱스가 생성되므로 입력/수정/삭제 시 불필요한 내부 작업이 증가해 성능에 악영향을 미칠 수 있습니다. 2. PK 구성과 Index 이용스키마를 생성하기 이전에 데이터 모델의 PK 순서를 조절하지 않은 채 테이블을 생성하면 인덱스를 이용하지 못해 테이블 Full Scan 현상이 발생할 경우가 있습니다.예시 테이블create table multi_pk_table( student_id varchar(255) not null, year datetime not null, semester int not null, .. 2024. 7. 13.
728x90