티스토리

초이로그
검색하기

블로그 홈

초이로그

suyeonchoi.tistory.com/m

수연초이의 개발 블로그

구독자
6
방명록 방문하기

주요 글 목록

  • [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 10장: 알림 시스템 설계 1단계 문제 이해 및 설계 범위 확정 알림 시스템에 관한 문제가 면접에 출제될 때는 보통 정해진 답이 없고 문제 자체가 모호하게 주어지는 것이 일반적이므로 적절한 질문을 통해 요구사항이 무엇인지 스스로 알아내야한다 2단계 개략적 설계안 제시 및 동의 구하기 iOS 푸시 알림, 안드로이드 푸시 알림, SMS 메세지 그리고 이메일을 지원하는 알림 시스템의 개략적인 설계안을 살펴보자. 1) 알림 유형별 지원 방안 각각의 알림 메커니즘이 동작하기 위해 필요한 컴포넌트를 알아보자 iOS 푸시 알림 : 알림 제공자 ➡️ APNS ➡️ iOS 단말 알림 제공자 : 알림 요청을 만들어 애플 푸시 알림 서비스를 보내는 주체. 다음 데이터가 필요 단말 토큰 페이로드 APNS : 애플이 제공하는 원격 서비스로 푸시 알림을 .. 공감수 0 댓글수 2 2023. 7. 17.
  • 코루틴 기본 코루틴이란? 코루틴이란 중단이 가능한 연산의 인스턴스이다. 실제 사용할 때는 스레드와 매우 다르지만, 이해를 위해서라면 가벼운 스레드라고 볼 수 있다. 서로 다른 부분의 코드 블럭을 동시에 수행할 수 있다는 점에서 스레드 개념과 유사하다. 하지만 코루틴은 특정 스레드에 연결된 것은 아니다. 하나의 스레드에서 코루틴의 실행이 중단되었더라도, 다른 스레드에서 코루틴이 동작할 수 있다. 코루틴 개념 정리 코루틴을 사용하기 위해서는 dependency를 추가해야한다 dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") } (참고: https://github.com/Kotlin/kotlinx.coroutines/bl.. 공감수 1 댓글수 2 2022. 12. 16.
  • 서블릿 필터 & 스프링 인터셉터 [10분 테코톡] 조시, 쿤의 서블릿 필터 & 스프링 인터셉터 을 정리한 글 공통 관심사항(대부분의 비즈니스 로직에서 관심을 가지는 부분)을 한번에 추출해서 처리한다면 코드를 간결하게 작성할 수 있다. 관심사항은 Spring AOP를 사용할 수도 있지만, 웹과 관련된 관심사항이라면 필터나 인터셉터를 이용하는 것이 좋다. 파라미터에 ServletRequest와 ServletResponse를 제공하므로 URL 정보나 HTTP 헤더를 직접 조작할 수 있기 때문이다. 서블릿 필터 정의 Filter는 J2EE 표준 스펙으로 Servlet API 2.3부터 등장하였고 Dispatcher Servlet에 요청이 전달되기 전, 후에 부가 작업을 처리하는 객체이다. 요청이 들어올 때는 서블.. 공감수 0 댓글수 0 2022. 11. 15.
  • 데이터베이스 락 [10분 테코톡] 🍧카일의 데이터베이스 락 [10분 테코톡] ⛲️ 오즈의 데이터베이스 Lock 을 정리한 글 요약 Optimistic Lock Pessimistic Lock 정의 충돌이 없을 것이라 예상 충돌을 예상하고 미리 락을 건다 사용방법 JPA를 사용하면 @Version 동작원리가 단순해서 만들기 쉬움 Mode 설정 및 쿼리에 직접 사용 DB 단에서 설정가능 별명 낙관적인 락 / 비선점적인 락 비관적인 락 / 선점적인 락 장점 데드락 가능성이 적으며 성능의 이점 충돌에 대한 오버헤드가 줄어든다 무결성을 지키기 용이하다 단점 충돌이 발생하면 오버헤드 발생 충돌이 없으면 오버헤드 발생 정의 데이터베이스의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장할 수 있는 직렬화 장치 .. 공감수 1 댓글수 2 2022. 11. 9.
  • OAuth2.0과 레벨로그의 Github 로그인 Interceptor과 Resolver에 관련된 설명은 생략합니다 OAuth? OAuth(Open Authorization)는 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준(문서로 공개된 기술 표준)이다. 아래의 사진을 예시로 들어보자. 제 3자 서비스(인프런)은 OAuth를 바탕으로 외부 서비스(카카오, 구글, 깃허브, 페이스북, 애플)로부터 특정 자원을 공유받을 수 있다. 왜 사용할까? OAuth가 없던 시절엔, 클라이언트는 리소스 소유자의 인증 정보를 사용하여 서버에게 보호된 리소스를 요청했다. 그렇기 때문에 제 3의 애플리케이션이 보호된 리소스를 접근하려.. 공감수 0 댓글수 0 2022. 10. 30.
  • JDK Dynamic Proxy vs CGLIB Proxy [10분 테코톡] 기론, 리버의 JDK Dynamic Proxy와 CGLIB [10분 테코톡] 🔥미르의 JDK Dynamic Proxy vs CGLIB Proxy 를 정리한 글 Proxy Proxy란 사전적 의미 = 대리 클라이언트로부터 타겟을 대신해서 요청을 받는 대리인 클라이언트가 사용하려고 하는 대상을 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것 프록시는 지정한 요청에 대해 부가기능을 수행 실제 오브젝트인 타겟은 프록시를 통해 최종적으로 요청받아 처리. 따라서 타겟은 자신의 기능에만 집중하고 부가기능은 프록시에게 위임 사용목적 클라이언트가 타깃에 접근하는 방법을 제어하는 것(ex. JPA 지연로딩) 타깃에 부가적인 기능을 부여하기 위한 것(ex. @Transactional, 시간 .. 공감수 1 댓글수 3 2022. 10. 18.
  • Spring AOP [10분 테코톡] 🌕제이의 Spring AOP [10분 테코톡] 🐸뚱이의 AOP - Advice Target Pointcut 를 정리한 글 부가 기능 서비스에서는 비즈니스 로직이라고 불리는 핵심 기능만 필요하다. 이 외에 시간을 재거나, 권한을 체크하거나, 트랜잭션을 거는 것은 모두 일종의 인프라 로직이라고 한다. 아래는 부가 기능이 섞여있는 서비스 코드의 예시이다. 인프라 로직 애플리케이션 전 영역에서 나타날 수 있다 중복 코드를 만들어낼 가능성 때문에 유지보수가 힘들어진다 ➡️ 유지보수가 어려워진다 비즈니스 로직과 함께 있으면 비즈니스 로직을 이해하기 어려워진다 인프라 로직은 로깅, 트랜잭션, 권한 검사, 성능 측정 등 하나의 관심사를 갖는다. 비즈니스 로직을 수행하는데 있어서 부가 기능이 되는 인프.. 공감수 2 댓글수 0 2022. 10. 14.
  • [SonarLint] 예외는 로그로 남기던가 다시 던져야한다. 그러나 둘 다 하면 안된다(java:S2139) Exceptions should be either logged or rethrown but not both In applications where the accepted practice is to log an Exception and then rethrow it, you end up with miles-long logs that contain multiple instances of the same exception. In multi-threaded applications debugging this type of log can be particularly hellish because messages from other threads will be interwoven with the repetitions o.. 공감수 0 댓글수 0 2022. 10. 14.
  • 인덱스 [10분 테코톡] 라라, 제로의 데이터베이스 인덱스 [10분 테코톡] 👨‍🏫안돌의 INDEX 를 정리한 글 MySQL InnoDB 환경 기준 인덱스란? 사전적 정의: 색인. 쉽게 찾아볼 수 있도록 일정한 순서에 따라 놓은 목록 데이터베이스 인덱스 데이터베이스 테이블에 대한 검색 성능을 향상시키는 자료 구조이며, WHERE절 등을 통해 활용된다. SELECT * FROM member; 쿼리는 WHERE 절을 통해 검색하지 않아 인덱스가 사용되지 않는다 인덱스 기준 없이 데이터가 저장된 상태 ➡️ 느리다(전체 데이터에서 순차적 확인) 특정 기준으로 정렬된 상태 ➡️ 검색(SELECT)이 빠르다 인덱스 특징 인덱스는 항상 최신의 정렬상태를 유지 인덱스도 하나의 데이터베이스 객체 데이터베이스 크기의 약 10.. 공감수 0 댓글수 0 2022. 10. 14.
  • CI/CD와 무중단 배포 [10분 테코톡] 찬, 레넌의 CI/CD와 무중단 배포를 정리한 글 CI/CD 용어 정리 컴파일: 프로그래머가 작성한 소스코드를 기계어로 변환하는 과정 빌드: 소스 코드 파일을 컴퓨터에서 실행할 수 있는 소프트웨어 산출물로 만드는 과정. 보통 컴파일 과정을 포함 배포: 빌드의 결과물을 사용자가 접근할 수 있는 환경에 배치하는 것 CI(Continuous Integration)란? 지속적 통합이라는 뜻으로 개발을 진행하면서도 품질을 관리할 수 있도록 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미한다. CI의 필요성 CI 이전에는 개발자들은 머지데이를 통해 모든 분기 소스코드를 병합하였다. 이는 많은 수작업과 리소스 낭비가 생겼다. 또한 개발자들이.. 공감수 0 댓글수 0 2022. 10. 9.
  • 코틀린 뽀개기 코틀린이란? 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어 간결하고 실용적 자바 코드와의 상호운용성을 중요시 코틀린 컴파일러가 생성한 바이트 코드는 일반적인 자바 코드와 똑같이 효율적으로 실행되어 성능 측에서 손해가 없다. (요 부분은 나중에 더 공부해보자) 참고로 코틀린이 자바 문법으로 컴파일하는 것보단 둘다 JVM 언어이므로 코틀린으로 만들어낸 바이트 코드나 자바로 만들어낸 바이트 코드 결과물이 같다. 정적 타입 지정 언어 굉장히 똑똑한 컴파일러. x = 1인 경우 int형으로 타입을 확정짓는다. 자바와 달리 타입을 뒤에 명시한다. 타입을 생략 가능. 변수를 앞에 선언한다. 세미콜론(;)을 붙이지 않아도 된다. var x: Int = 1 var x = 1 함수 기본적으로 자바의 메서드는 클래스가 있.. 공감수 1 댓글수 2 2022. 10. 8.
  • 트랜잭션 [10분 테코톡]🌼 예지니어스의 트랜잭션 [10분 테코톡] 🙊 에이든의 트랜잭션 메커니즘 [10분 테코톡] 🐤 샐리의 트랜잭션 을 정리한 글 트랜잭션은 왜 필요할까??? 가장 대표 예시인 계좌 이체 결제 과정을 생각해보자. 해당 과정에서 오류가 발생한다면, 구매자의 계좌에서 돈이 출금된 뒤, DB가 다운된다. 구매자의 계좌에서 돈이 출금되지 않았는데, 판매자에게 돈이 입금된다. 출금도 입금도 되지 않는다. 등의 오류가 발생할 것이다. 이를 해결하기 위해서는 어중간한 상태 없이 전부 없었던 일로 해주자. (= 트랜잭션) 트랜잭션이란 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는 것 쿼리들이 한꺼번에 모두 실행되거나 아예 아무 쿼리도 실행되지 않게 하는 것 트랜잭션은 사용자 혹은 시스템 상의 .. 공감수 2 댓글수 0 2022. 10. 8.
  • 스프링 트랜잭션 [10분 테코톡] 후니의 스프링 트랜잭션 [10분 테코톡]🌼 예지니어스의 트랜잭션 [10분 테코톡] 🐤 샐리의 트랜잭션 을 정리한 글 JDBC API에서의 트랜잭션 다음 구조의 문제점은? ChessService의 move 메서드는 두번의 update query를 날린다. 각 update query는 새로운 트랜잭션을 생성하여 DB에 저장한다. 이 때 각 쿼리마다 트랜잭션을 commit하기 때문에 updateSquare() 메서드 실행 시 트랜잭션이 DB에 커밋이 되고 그 상태로 RuntimeException이 발생하여 빈칸만 남은 데이터만 저장되고 메서드가 종료된다. (쉽게 말해 트랜잭션이 걸려있지 않은 경우, 롤백이 안된다는 것) 해결 방법: 하나의 비즈니스 로직을 단일 트랜잭션으로 관리하.. 공감수 3 댓글수 0 2022. 10. 2.
  • [Kubernetes] 쿠버네티스 쿠버네티스(Kubernetes)? 도커 컨테이너와 도커 스웜, 도커 컴포즈 도구의 개념을 한군데로 모아 사용할 수 있는 훌륭한 프로젝트 사실상 표준으로 사용되고 있는 컨테이너 오케스트레이션 도구. 구글에서 2014년에 오픈소스로 공개한 이후, 오픈시프트, 랜처와 같은 클라우드 플랫폼을 비롯한 많은 회사들이 실제 서비스 운영에 도입해 사용중 도커 스웜 모드처럼 여러 대의 도커 호스트를 하나의 클러스터로 만들어준다는 점은 같지만, 세부적인 기능을 더욱 폭넓게 제공하기 때문에 실제 서비스 운영 단계에서는 쿠버네티스가 가장 많이 사용된다. [장점] 서버 자원 클러스터링, 마이크로서비스 구조의 컨테이너 배포, 서비스 장애 복구 등 컨테이너 기반의 서비스 운영에 필요한 대부분의 오케스트레이션 기능을 폭넓게 지원 구.. 공감수 0 댓글수 0 2022. 8. 7.
  • [Docker] 도커는 왜 사용하는가? 도커(Docker)란? 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트 Go 언어로 작성돼 있으며 2013.03에 첫 릴리스가 발표 기존에 쓰이던 가상화 방법인 가상 머신과 달리 성능의 손실이 거의 없어 차세대 클라우드 인프라 솔루션으로 주목받고 있다. 도커와 관련된 프로젝트는 도커 컴포즈, 레지스트리, 도커 허브, Docker for Descktop 등 여러가지가 있지만 일반적으로 도커 엔진 혹은 도커에 관련된 모든 프로젝트를 의미. 보통 도커 엔진이라는 의미로 많이 쓰이며 도커 엔진은 컨테이너를 생성하고 관리하는 주체로 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 주 프로젝트이다. 도커 생태계의 여러.. 공감수 0 댓글수 0 2022. 8. 7.
  • [구글 엔지니어는 이렇게 일한다] Part2.문화 보호되어 있는 글입니다. 공감수 0 댓글수 2 2022. 6. 17.
  • [Kotlin In Action] 1장. 코틀린이란 무엇이며, 왜 필요한가? 코틀린의 주요 특성 주 목적: 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것 정적 타입 지정 언어 ↔️ 동적 타입 지정 언어(ex. Groovy, JRuby) 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있다. 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증한다. 코틀린은 모든 변수 타입을 직접 명시하지 않아도 된다. 코틀린 컴파일러가 변수 타입을 자동으로 유추하기 때문이다. ➡️ 타입추론 성능, 신뢰성, 유지 보수성, 도구 지원성에서 장점을 갖는다. 코틀린은 nullable type을 지원한다. 컴파일 시점에 NullPointerException을 검사하여 프로그램의 신뢰성을 높인다.(6장) 함수형 프로그래밍.. 공감수 1 댓글수 2 2022. 5. 30.
  • 객체지향 생활체조 9가지 원칙 더보기 1. 한 메서드에서 한 단계 들여쓰기만 사용하자 2. else 예약어를 쓰지 말자 3. 모든 원시값과 문자열을 포장하자 4. 일급 컬렉션을 사용하자 5. 한줄에 한개의 점만 사용하자 6. 축약하지 말자 7. 모든 엔티티를 작게 유지하자 8. 클래스는 변수 두개를 넘지 않게 하자 9. getters, setters, properties를 사용하지 말자 객체지향 생활체조(Object Calisthenics)란, Jeff Bay가 The ThoughtWorks Anthology(SW공학 에세이 모음집)에서 처음 소개되었다. 원칙들은 만병통치약이 아니므로 모든 디자인 문제점들을 해결해줄 수는 없다. 하지만 객체지향 생활체조의 주요 목적이 특정 SOLID 원칙을 적용하기 위함이기 때문에, 이를 적용하면 보.. 공감수 2 댓글수 0 2022. 2. 25.
  • 배민다움 개발 서적을 읽고 싶었는데 눈 깜빡하니 설날이라.. 2021년에 읽다가 만.. 가볍게 읽을 수 있는 책을 선택했다! 목차에서도 알 수 있듯이 아무래도 앞쪽엔 기업 브랜딩이나 사업에 관련된 이야기가 주를 이루지만, 3부 내부 브랜딩 이야기는 사업이 아닌 우아한 형제들에 관심이 있는 사람이라면 읽어보는 것을 추천한다. 아직 사업에 관심이 없는 나는 2부까진 '사업하려면 굉장히 많은 것을 신경써야 하는군.....'하고 큰 생각 없이 읽다가 3부에선 '이런 사람들이 우형을 가는구나!'하고 매우 흥미로웠다. 가장 인상깊었던 구절! 좋은 사람이 되고 싶은데, 이 구절을 읽으면서 높은 퀄리티를 갖춘 사람이면서도 친근한 사람이 되고 싶다는 생각이 들었다. 거의 초등학생 이후로 독후감을 처음 써봐서 그런지 너무 어색하다.. 공감수 2 댓글수 0 2022. 1. 31.
  • 웹 백엔드 프리코스 3주차 후기 미션에서 나의 목표 이번 미션의 목표는 여러 개의 클래스를 분리한 후 서로 관계를 맺어 하나의 프로그램을 완성하는 것이다. 나는 2주차 미션의 피드백 중 하나인 "객체에게 메세지를 보내라"가 목표가 밀접한 연관이 있다고 느껴졌다. 따라서 이번에는 객체 지향 설계의 원칙인 SOLID 중, 단일 책임의 원칙을 최대한 지키기 위해 노력해보았다. 이 외에도,, "비즈니스 로직과 UI로직을 분리하라"는 피드백을 보고 MVC패턴을 도입하였다. MVC란, Model, View, Controller 세가지로 구분하여 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 사용되는 소프트웨어 디자인 패턴이다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있어, 독립적으로 개발하기 쉽고 로직 재사용이 효과적이.. 공감수 2 댓글수 0 2021. 12. 29.
  • [solved.ac] 상위 100문제 골드 이상으로 채우기 완료! 2020.12.09 드디어 상위 100문제 골드로 다 채웠다!!!!! (마지막으로 푼문제는 열쇠) 이전에 풀었던 골드1 문제가 플레로 업그레이드 되어서 올골드가 안된건 아쉽지만.. 상반기때 코테좀 뚫어봤다고 여름에 쉬운문제로만 설렁설렁 풀다가 solved.ac에도 잔디가 생겼길래 심는 재미를 붙여서 달성할수 있었다. 푼 문제중에 가장 인상깊었던 상어 시리즈... 뭔 오기였던지 매일매일 연속으로 하나씩 풀고 싶었다 전날보다 문제 난이도가 낮아지면 기분 좋았고 어려워졌을땐 다른 문제로 도망가고 싶었지만 RPG 키우듯이 이악물고 풀었다ㅠㅠ 구현 + 배열 돌리기 연습을 집중적으로 할 수 있었지만 여전히 힘들다 (나 혼자) 충격적이었던 사건은 자바 자료구조에서 이진트리가 지원된다는 것을 최근에 알았다는 것이다. .. 공감수 1 댓글수 2 2021. 12. 9.
  • [우아한 테크코스 4기] 웹 백엔드 프리코스 피드백 정리 보호되어 있는 글입니다. 공감수 0 댓글수 0 2021. 12. 9.
  • 웹 백엔드 프리코스 1-2주 차 후기 본 교육과정이 아닌 프리코스 과정이라 포스팅까지 생각은 크게 없었는데, 기대 이상으로 많이 배울 수 있어 느낀점을 기록하기 위해 글을 씁니다. 1주차 미션: 숫자 야구 게임 1주차때는 기능과 코드 요구사항이 적었기 때문에, 컨벤션에 적응하여 코드를 작성하는 것에 초점을 많이 맞췄다. 특히 깃 커밋 메세지 컨벤션 문서는 영어라서 열심히 읽고 해석본도 찾아보고 커밋을 영어로 남기며 내가 잘쓰는게 맞나라는 의구심도 들었다(;;) 차라리 한글로 작성할껄 그랬나..라는 생각도 들었지만 원본 문서를 참고한 만큼 영어로 작성한 경험도 의미가 있었다. 하지만 요구사항에 대해 더 깊은 고민을 하지 않고 지키기만에 급급했던 점이 아쉽다.. 지금와서 1주차 코드를 보니 클래스와 메소드 분리 면에서 고치고 싶은점이 정말 많다.. 공감수 2 댓글수 3 2021. 12. 7.
  • [BOJ]17779: 게리맨더링 2 https://www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net 게리맨더링1은 그래프 개념을 통해 쉽게 구현할 수 있었는데 2번은 배열 빡구현이라 인덱스 설정하면서 두통을 얻을 수 있었다! 다 풀고 난 뒤 보니까 규칙을 사용하신 분들도 있었는데 난 복잡할 수록 조건에 맞게 단위를 나눠서 푸는게 편해서 빡구현 했다^^. 기준점 (x, y)와 경계의 길이 d1, d2를 정한다. ▶︎ 범위에 해당하는 경우만 다음 단계를 진행한다. 다음 칸은 경계선이다. ▶︎ markFi.. 공감수 0 댓글수 0 2021. 11. 24.
  • [사전과제] URL Shortener 프로젝트 조건 웹 페이지 입력폼에 URL 입력 시 단축된 결과 출력 브라우저의 주소창에 단축 URL 입력 시 기존 URL로 리다이렉트 같은 URL 입력 시 동일한 결과값 도출 결과값은 주소를 제외하고 8글자 이내로 생성 사용한 기술 Spring Boot, Thymeleaf, MySQL 시작하기에 앞서 고민 1) DB를 사용해야하는 이유 url shortener의 원리라고 하면, 원본 URL과 키값을 전단사함수를 통해 일대일 대응하는 것이다. 근데 문득 어짜피 같은 함수로 적용하는데 왜 굳이 키 값을 생성해서 대응...? 하는 생각이 문득 들어서 검색해보았다. 결론적으로 원본 URL보다 더 길어질수 있기 때문이다. 조금만 생각해보면 엄청나게 긴 문자열을 압축해야하는 것인데 단순한 일련번호를 인코딩하는 것이.. 공감수 1 댓글수 1 2021. 11. 14.
  • WebClient를 사용해서 외부 API 호출시간 단축하기 1. WebClient를 사용 배경 1) 프로젝트에서의 문제점 프로젝트를 진행하던 중, 하나의 클라이언트 요청에 대해 여러 번의 외부 API를 호출(최대 16번....)해야하는 상황이 생겼다. RestTemplate을 사용하여 모든 외부 API를 동기적으로 호출하다보니 평균적으로 5초이상 걸렸으며 10초가 넘는 경우도 발생하였다. 2) 해결하기 위한 시행착오 처음에 생각한 방식은 병렬처리 방식이다. 각각의 음식점에 대해 url, 이미지, 카테고리를 각각 외부 API를 호출하여 가져오고 있으므로 음식점으로 스트림을 생성하여 3개의 작업(외부 API를 호출하는 작업)을 병렬적으로 처리하면 된다고 생각했다. 결과는 시간이 매우 단축되고 아주 좋았다! .....로컬에서만 말이다^^ㅠ 로컬에서 개발하던 나의 PC.. 공감수 3 댓글수 12 2021. 10. 15.
  • [BOJ]17071:숨바꼭질5 이전의 숨바꼭질 시리즈와는 다르게 시간에 따라 동생의 위치가 바뀐다. == 이전에 방문했던 좌표를 재방문할 수 있다. (최소시간을 위해) == BFS로만 돌리면 메모리 초과를 맛볼 수 있다. 역시 골드1의 문제... 약간의 아이디어가 필요했다. 헤이 구글 1. 재방문의 경우, 최소 2초가 걸린다. 2. 수빈이가 각 좌표에 도달하는 최초 시간을 구한다. 즉, 각 좌표에 도달하는 최소 시간을 구한다면, 해당 좌표는 언제나 2n초 안에 돌아올 수 있다. 2n초 안에 재방문 가능하다는 것은, 최초 시간이 홀수라면 언제나 홀수 시간에, 최초 시간이 짝수라면 언제나 짝수 시간에 방문 가능하다는 것이다. 따라서 짝수로 최초 도달하는 시간, 홀수로 최초 도달하는 시간을 구분해야한다. int[][] vis = new i.. 공감수 1 댓글수 0 2021. 10. 5.
  • [BOJ]17135:캐슬 디펜스 이정도 난이도의 구현문제가 그렇듯 "오? bfs/dfs 써서 구현만 딱하면 될거 같은데?" 하고 덤비면 점점 꼬이는 문제.. 7달전의 나처럼.. 게임이 진행되는 것과 같이 차근차근 케이스를 나누고 적절한 알고리즘을 대입하면 쉽게 해결할 수 있다. 1. 궁수를 배치한다. -> M개의 자리중 3개를 선택하는 문제이므로 재귀를 사용하여 조합을 구현 private static void combination(int cnt, int st) { if (cnt == 3) { // 궁수 3명 자리 고르기 완료! 조합 완성! } else { for (int i = st; i < M; i++) { archers[cnt] = i; combination(cnt + 1, i + 1); } } } 2. 완성된 조합에서, 몇명의 적.. 공감수 0 댓글수 0 2021. 10. 5.
  • [BOJ]2206:벽 부수고 이동하기 최단 거리를 구해야하므로 BFS 문제이다. 처음에는 큐마다 방문 배열을 함께 넣어서 풀었었다. static class Point { int x; int y; boolean wall; int[][] vis; public Point(int x, int y, boolean wall, int[][] vis) { this.x = x; this.y = y; this.wall = wall; this.vis = vis; } } // ... private static int bfs() { // ... Queue queue = new LinkedList(); // ... } 하지만 N*M 최대가 1000 * 1000이다보니 배열을 계속 생성해서 메모리 초과가 난다. 그리고 처음에 메모리 초과가나는 이유가 궁금해서 찾다가 .. 공감수 0 댓글수 0 2021. 9. 18.
  • [SQL 고득점 Kit] String, Date 루시와 엘라 찾기(Level.2) 문제 / 풀이 WHERE 절에서 IN() 연산자를 사용하면 콤마(,)로 구분된 값들중 하나 이상과 일치하는 경우 맞다고 판단한다. 이를 활용하여 루시나 엘라 이름을 검색하는 조건을 추가하하였다. 이름에 el이 들어가는 동물 찾기(Level.2) 문제 / 풀이 LIKE의 와일드 카드인 %를 사용하여 '%el%'로 이름 탐색 조건을 추가하여 조회하였다. 조회결과 4개가 나오던데 할머니는 기르던 개를 찾으셨을까,,,? 중성화 여부 파악하기(Level.2) 문제 / 풀이 CASE문을 사용하여 풀이하였다. 다음은 CASE문 사용 방법 CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN conditionN THE.. 공감수 0 댓글수 0 2021. 8. 17.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

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

    © Kakao Corp.