728x90
Hot
- [Spring] 스프링 캐시 알아보기 (@Cacheable, @CachePut, @CacheEvict) 스프링 캐시 캐시란? 자주 사용되는 데이터를 저장하는 공간을 의미합니다. 자주 사용되는 데이터를 매번 요청 때마다 생성하여 응답하는 것 보다는 생성된 데이터를 저장해놓고 똑같은 요청이 왔을 때 로직을 거치지 않고 데이터를 반환해주는 것이 서버에 리소스 사용을 줄일 수 있으므로 성능을 향상할 수 있습니다. 그렇다면 캐시는 어디에 사용하는 것이 좋을까요? 클라이언트에게 전달되는 값이 동일할 때 빈번하게 호출될 때 한 번 처리할 때 많은 서버 리소스를 요구 할 때 예시로는 공지사항, 조회수, 랭킹 등이 캐시를 많이 적용합니다. 반대로 캐시를 적용하지 말아야하는 경우는 언제일까요? 실시간으로 정확성을 요구하는 경우 빈번하게 데이터 변경이 일어나는 경우 spring-boot-starter에서 제공하는 캐시는 서버..
- [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..
- [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:..
- [네트워크] DMZ(Demilitarized Zone) 의미와 뜻 네트워크에서 내부망과 외부망에대해서 이야기할 때가 있습니다. 이때 DMZ라는 용어도 함께 언급되는데요 DMZ란 한국어로 직역하면 비무장지대로 아군과 적군 어느쪽이든 무장을 하지 않은 상태를 의미합니다. 그렇다면 네트워크에서 말하는 DMZ는 어떤 의미를 가질까요? 간단하게 DMZ가 가지는 의미부터 어떤 용도로 사용되는지까지 알아봅시다. DMZ란? DMZ란 Demilitarized Zone의 약자로 내부/외부망의 중간 지점을 의미합니다. 내부/외부 네트워크 사이에 중간지점에 위치하여 침입 차단 시스템 등으로 접근 제한을 수행하지만 외부에서 DMZ로의 직접 접근은 가능합니다. 배경 왜 DMZ라는 것을 만들어 사용하게되었을까요? 그 배경에대해서 알아봅시다. 컴퓨팅과 네트워크를 사용하는 기관들은 보안 목적으로 L..
- [Spring] Filter와 Interceptor 의미와 차이 필터(Filter)란? 필터 개념 필터는 Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. Dispatcher Servlet은 스프링 가장 앞단에 존재하는 프론트 컨트롤러(Front Controller)라고도 한다. 즉 필터는 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 된다. (스프링 범위 밖에서 처리) 필터 구조 필터 메소드 필터를 추가하하기 위해서 Filter 인터페이스를 구현해야한다. (implements) 이때 3가지 메소드를 구현한다, init() doFilter() destroy() 1) init() init 메소드는 필터 객체를 초기화하고 서비스에 추가하기 위한 메소드이다. 웹 컨..
New
- [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..
- [Spring] 스프링에서 특정 HTTP 응답코드 반환하기 (ResponseEntity, @ResponseStatus) 목차 1. Spring 에서 HTTP 응답상태 코드Spring은 HTTP 응답 상태 코드를 사용자 정의 할 수 있는 다음과 같은 방법을 제공합니다.ResponseEntity 객체 응답@ResponseStatus 어노테이션ResponseStatusException 예외 발생 2. ResponseEntityResponseEntity 인스턴스와 함께 HTTP 응답 상태 코드를 전송할 수 있습니다.예시 코드요청을 통해서 전달 받은 Student 인스턴스를 생성하는 API가 있고, API를 호출했을 때 성공적으로 수행했을 때 Spring에서는 200 응답 코드를 보냅니다.요청을 통해서 전달 받은 Student 인스턴스를 생성하는 API에서 성공적으로 처리가 완료되면 201(CREATED) 응답을 보내고 싶을 ..
- [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는 ..
- [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()..
- [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..
- [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) ..
- [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..
- [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)
- [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..
- 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..
728x90