728x90 Hot [MySQL] 다중 테이블 업데이트, 여러 테이블 update 하기 MySQL에서 한 번의 쿼리로 여러 개의 테이블을 update 처리해야하는 경우가 종종 있습니다. 이때 사용하는 쿼리는 매우 간단!! UPDATE 테이블A a, 테이블B b SET a.column = value, b.column = value WHERE [ 조건문 ] 위 쿼리를 이용하여 기존 행에 새로운 값을 설정합니다. 새로운 값을 덮어씌워 이전 값을 재정의합니다. 단, 여러 테이블을 업데이트하는 구문은 ORDER BY 구문이나 LIMIT 구문과 함께 사용할 수 없습니다. JOIN을 이용하는 경우 아래와 같이 사용할 수 있습니다. UPDATE 테이블A a, 테이블B b SET a.column = value, b.column = value WHERE a.column = b.column 참고: https:.. 댓글 0 2022.10.06 [Spring] Spring 프로젝트에서 리소스 파일 읽기 (Java8) Springboot에서 File 을 읽어오자 스프링부트에서 자바 코드로 파일을 읽어오기 위해 아래와 같이 코드를 생성했습니다! Path fileName = Path.of("src/main/resources/template/test.txt"); String actual = Files.readString(fileName); 하지만 Path.of 와 Files.readString에서 인텔리제이가 빨간 밑줄을 쳐줬는데요, 자바8에서는 지원하지 않는 메소드여서 오류가 발생했습니다. 그래서 자바8 기준으로 코드를 수정했습니다. Path filePath = Paths.get("src/main/resources/template/test.txt"); List lines = Files.readAllLines(filePat.. 댓글 0 2023.08.11 [Spring] 스프링 캐시 알아보기 (@Cacheable, @CachePut, @CacheEvict) 스프링 캐시 캐시란? 자주 사용되는 데이터를 저장하는 공간을 의미합니다. 자주 사용되는 데이터를 매번 요청 때마다 생성하여 응답하는 것 보다는 생성된 데이터를 저장해놓고 똑같은 요청이 왔을 때 로직을 거치지 않고 데이터를 반환해주는 것이 서버에 리소스 사용을 줄일 수 있으므로 성능을 향상할 수 있습니다. 그렇다면 캐시는 어디에 사용하는 것이 좋을까요? 클라이언트에게 전달되는 값이 동일할 때 빈번하게 호출될 때 한 번 처리할 때 많은 서버 리소스를 요구 할 때 예시로는 공지사항, 조회수, 랭킹 등이 캐시를 많이 적용합니다. 반대로 캐시를 적용하지 말아야하는 경우는 언제일까요? 실시간으로 정확성을 요구하는 경우 빈번하게 데이터 변경이 일어나는 경우 spring-boot-starter에서 제공하는 캐시는 서버.. 댓글 0 2023.03.12 [JAVA] StringUtils.isBlank()와 StringUtils.isEmpty() 차이 Apache Commons에서 제공하는 패키지중 하나인 StrigUtils 를 사용하여 String의 null 체크, white space(공백) 체크 또는 빈 문자열의 유무를 확인 할 수 있습니다. StringUtils 알아보기 StringUtils는 org.apache.commons.lang.StringUtils 패키지에서 제공하는 클래스입니다. 자바의 String 클래스가 제공하는 문자열 관련 기능을 강화한 클래스인데요 StringUtils의 특징은 아래와 같습니다. - 특징 StringUtils 클래스만으로 거의 대부분의 문자열 처리를 수행 파라미터 값으로 null을 주더라도 NPE (Null Point Exception)을 발생시키지 않음 참고: https://commons.apache.org/.. 댓글 0 2023.02.11 [네트워크] DMZ(Demilitarized Zone) 의미와 뜻 네트워크에서 내부망과 외부망에대해서 이야기할 때가 있습니다. 이때 DMZ라는 용어도 함께 언급되는데요 DMZ란 한국어로 직역하면 비무장지대로 아군과 적군 어느쪽이든 무장을 하지 않은 상태를 의미합니다. 그렇다면 네트워크에서 말하는 DMZ는 어떤 의미를 가질까요? 간단하게 DMZ가 가지는 의미부터 어떤 용도로 사용되는지까지 알아봅시다. DMZ란? DMZ란 Demilitarized Zone의 약자로 내부/외부망의 중간 지점을 의미합니다. 내부/외부 네트워크 사이에 중간지점에 위치하여 침입 차단 시스템 등으로 접근 제한을 수행하지만 외부에서 DMZ로의 직접 접근은 가능합니다. 배경 왜 DMZ라는 것을 만들어 사용하게되었을까요? 그 배경에대해서 알아봅시다. 컴퓨팅과 네트워크를 사용하는 기관들은 보안 목적으로 L.. 댓글 0 2022.10.27 이전다음 New [쿠버네티스 스터디.1-3] CI/CD, Docker, Container 목차 1. CI/CD 란 지속적 통합 (CI) + 지속적 전달 (CD - Continuous Delivery) + 지속적 배포 (CD - Continuous Deployment) 2. CI/CD 특징협업 효율성 증가품질 향상지속적인 통합과 배포 3. GithubActions vs Jenkinsgithub actionsgithub 저장소에 통합된 ci/cd 도구로 코드 변경 사항이 발생하면 자동으로 빌드, 테스트, 배포 작업 수행장점클라우드 기반으로 별도 인프라 구축 불필요간편한 설정, yaml 파일로 워크플로우 정의하여 설정이 직관적github 와 통합하여 빠른 배포 가능Jenkins오픈소스 자동화 서버, 빌드/테스트/배포 과정을 자동화하는데 사용됨. 플로그인 기반 아키텍처로 배포 환경에 맞게 확장.. 2025.03.27 [쿠버네티스 스터디.1-2] 확장성, 고가용성, 안정성 1.모던 애플리케이션 특징고가용성 high availability을 통해 서비스가 장애 발생시에도 중단되지 않도록 설계됨확장성을 갖추어 수직적/수평적 확장 가능복원력을 통해 빠르게 복구 가능자동화된 ci/cd pipeline과 container 기술을 통해 빠른 배포 주기와 일관된 품질 보장데이터 복제, 샤딩, Failover 와 같은 분산 시스템 적극 활용됨2.고가용성 (High Availability, HA)Why?서비스 다운은 매출손실, 사용자 이탈, 신뢰도 하락으로 이어짐. 무중단 서비스가 이루어져야 됨.3.고가용성의 핵심 개념1) Single Point of Failure (SPOF)하나의 장애로 인해 전체 시스템이 멈추는 지점e.g. 서버 1대로 운영하면 서버가 다운될 경우 서비스도 중단됨 2.. 2025.03.25 코틀린의 Error Handling - runCatching 코틀린의 runCatching자바의 try~catch 와 동일하게 지원하지만 조금 다른 방법으로 핸들링 할 수도 있습니다! 예를들어 아래와 같은 요구사항이 있다고 가정해봅니다.LoginApiClient 호출 시 LoginException 발생errorCode = INVALID_PASSWORD인 경우 예외를 발생하지 않고 null을 리턴한다.그 외 에러는 모두 예외를 발생시킨다. try ~ catch 를 사용한 코드try { loginApiClient.login(request)} catch (e: LoginException) { if (e.errorCode == "INVALID_PASSWORD") { return null } else { throw e }} Java 에서는 익숙하게 위처.. 2025.03.24 [쿠버네티스 스터디.1-1] 모던 애플리케이션의 특징 전통적인 애플리케이션 vs 모던 애플리케이션전통적인 애플리케이션이란?모놀리식 구조로 수동 배포하는 구조의 애플리케이션모던 애플리케이션이란?빠르게 변화하는 기술 환경과 비즈니스 요구에 맞춰 설계된 애플리케이션- 특징: 클라우드 네이티브 (cloud-native) 전통적 애플리케이션모던 애플리케이션모놀리식 구조마이크로서비스 아키텍처 MSA수동 배포CI/CD 자동화 배포물리 서버 기반클라우드 및 컨테이너 기반낮은 확장성높은 확장성(scale- in, out)다운타임 발생 가능고가용성 및 무중단 배포 클라우드 네이티브애플리케이션을 클라우드 환경에서 효과적으로 개발, 배포, 운영할 수 있도록 설계하는 방법클라우드 환경에서 애플리케이션이 더 잘 동작하도록 만들어진 것 특징유연한 확장성빠른 배포 및 업데이트자동화:.. 2025.03.23 [LeetCode] 3191. Minimum Operations to Make Binary Array Elements Equal to One I (Python) Problem Solutionsliding window 연속된 3개 숫자를 뒤집어서 모두 1로 바꿀 수 있는 최소한의 횟수를 구하는 문제.당연히 2중포문을 쓰면 시간초과가 발생한다.n-2까지만 검사해서 nums[i] == 0 이면 i ~ i+2까지 비트연산으로 1, 0을 뒤집는다.연산이 끝나면 answer+=1비트연산 파이선으로 ^= 이더라? 괜히 if~else 구문으로 바꾸고있었네 마지막에 2개숫자가 0이면 연속된 3자리가 아니라 못바꾸므로 바로 리턴 -1아니면 answer return Codeclass Solution: def minOperations(self, nums: List[int]) -> int: n = len(nums) ans = 0 for i i.. 2025.03.19 [LeetCode] 3208. Alternating Groups II (Python) Problem Solutionsliding window 처음에 구현으로 2중 포문 돌렸다가 time limit exceeded 났던 문제.이 문제도 똑같이 sliding window 기법으로 풀어야된다.원형 배열이라서 colors[: k-1]개만큼 기존 배열에 더해준다.그리고 이전 원소와 값을 비교하며 (index 범위는 1 부터 시작) count 를 증가한다.count가 k 이상이면 조건을 만족하므로 answer ++만족하지않으면 count = 1 로 초기화하여 다시 리셋해준다. Codeclass Solution: def numberOfAlternatingGroups(self, colors: List[int], k: int) -> int: n = len(colors) .. 2025.03.09 [LeetCode] 2379. Minimum Recolors to Get K Consecutive Black Blocks (Python) ProblemSolutionstringsliding window blocks string에서 연속된 B의 개수가 k개가 될 수 있도록 가장 최소한의 변경해야되는 W 수를 구하는 문제.substring에서 힌트를 얻어서 k길이만큼 substring을 구하고 W의 개수를 구한뒤 가장 최소값을 리턴하였다. 나는 구현으로 일일이 string을 검사하는 방식으로 풀이했는데 슬라이딩 윈도우 기법을 사용하면 더 최적화된 알고리즘 O(N)으로 해결할 수 있다. Codeclass Solution: def minimumRecolors(self, blocks: str, k: int) -> int: n = len(blocks) answer = 999 if 'W' in blocks a.. 2025.03.08 [LeetCode] 2965. Find Missing and Repeated Values (Python) Problem Solutionarrayn*n 2차 배열에서 중복된 값, 존재하지 않는 값을 찾는 문제.hash를 사용해서 frequency를 구한다음에 정답을 구해도되고나는 1~n*n까지 연속된 숫자이므로 visited 를 사용해서 이미 방문했는지를 체크하도록 했다. Codeclass Solution: def findMissingAndRepeatedValues(self, grid: List[List[int]]) -> List[int]: answer = [] n = len(grid) visited = [0] * (n*n + 1) twice_num = 0 missing_num = 0 for i in range(.. 2025.03.06 [LeetCode] 1092. Shortest Common Supersequence (Python) Problem SolutiondbLCS (Longest Common Subsequence)이 문제의 힌트를 보고 LCS 알고리즘을 사용한 문제라는 것을 알았다.LCS 알고리즘에 대한 설명은 다른 블로그에서 더 자세하게 설명해두어서 참고했다!https://chanhuiseok.github.io/posts/algo-34/ 알고리즘 - LCS(Longest Common Subsequence, 최장 공통 부분 문자열) 알고리즘LCS 알고리즘이란?chanhuiseok.github.io 단 LCS 의 길이를 구하는 알고리즘이라서 LCS 문자를 찾으려면 역추적(back tracking)을 이용해서 구해야한다. 주어진 2개의 string의 LCS 를 구하는 규칙은 아래와 같다.문자열을 비교하여 같았을 때현재 칸에 들어.. 2025.02.28 [LeetCode] 873. Length of Longest Fibonacci Subsequence (Python) Problem Solutiondphashi, j를 피보나치 수열 마지막 두 숫자로 두고 dp[(i, j)] 에 해당 수열의 길이를 저장한다.해시맵 index_map 을 사용하여 빠르게 arr[k] 의 index를 찾을 수 있도록한다.해시셋을 이용하여 arr[i]+arr[j] in arr 여부를 확인한다.Bruteforce 로 풀면 time limit exceeded 나는 문제. db를 사용해서 풀어햐한다. (i, j)를 마지막 두 숫자로 하는 피보나치 수열 찾기!즉, arr[i], arr[j]를 고정하고, arr[i] + arr[j] == arr[k]가 되는 k를 찾아가야 합니다.이를 위해 j를 기준으로 i를 선택하고, (i, j) 쌍을 만들도록 설계합니다.반복문을 돌때 j부터 돌아서 항상 idb[(i,.. 2025.02.27 more 728x90