728x90

카테고리 204

[백준] 9372번 JAVA 풀이

[백준] 9372번 JAVA 풀이 최소 신장 트리상근이의 여행 문제 풀이를 처음 봤을때 BFS로 풀어야하나? 라는 생각이 들수도 있다.하지만 이 문제는 최소 스패닝 트리를 사용해 쉽게 풀 수 있는 문제이다. 신장트리란 어떤 그래프에 대해 모든 꼭짓점을 포함하는 부분 그래프이다.최소 신장 트리는 신장 트리에서 최소의 가중치를 가지는 부분 그래프이다. 접근 방법n개의 노드를 모두 이을 수 있는 최소 간선의 개수를 구해보자. 노드의 개수가 2개일 때 간선의 개수는 1개이고,노드의 개수가 3개일 때 간선의 개수는 2개임을 알 수 있다.이를 통해서 노드 개수가 N일때 간선의 개수는 N-1개 임을 알 수 있다. 문제에서 입력되는 값이 그래프의 값이고, 탑승한 비행기의 종류를 출력하기 때문에가중치가 1인 양방향 그래..

CS/코딩테스트 2024.05.16

다량의 데이터를 활용하여 JPA 성능 개선 및 시간 측정 방식

IT 연합 동아리 코테이토 9기의 백엔드 네트워킹 세번째 주제로 다량의 엑셀 데이터를 얻었을 때, 코드를 리팩토링하여 성능을 향상 시키는 방식에 대해서 알아보려고 합니다. 제가 찾은 방식은 캐시, 비동기, 멀티스레드,  bulk insert (Spring Batch) 사용입니다.  - 먼저 리팩토링 전 [13.656초] - 데이터 삽입 작업을 비동기적으로 처리하여 UI 스레드를 블록하지 않도록 해줍니다. [11.429초]@Async 어노테이션을 활용할 수 있습니다.   - 자주 조회되는 데이터는 캐시에 저장하여 데이터베이스 조회를 줄입니다. [10.389초]@Cacheable 어노테이션을 사용할 수 있습니다.    - bulk insert를 사용하여 성능을 개선할 수 있습니다.대량의 데이터를 한 번에 삽..

CS 2024.05.15

JWT & 스프링 시큐리티 & 카카오 소셜로그인 API 활용방법 (2)

JWT & 스프링 시큐리티 & 카카오 소셜로그인 API 활용방법 (2)  소셜 로그인을 위해서 OAuth를 사용합니다. OAuth는 사용자의 접근 권한을 위임 받을 수 있는 표준 프로토콜로, 클라이언트가 서드파티에 저장한 정보를 우리 프로젝트에서 사용할 수 있도록 하는 것입니다. 이 글에서는 OAuth2 라이브러리를 사용하여 카카오 로그인을 구현하는 방법에 대해서 정리해 보겠습니다.  카카오 애플리케이션 생성https://developers.kakao.com/ Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com 카카오 디벨로퍼 사이트에 접속하여 내 애플..

Back-End/Project 2024.05.05

JWT & 스프링 시큐리티 & 카카오 소셜로그인 API 활용방법 (1)

JWT & 스프링 시큐리티 & 카카오 소셜로그인 API 활용방법 (1) IT 연합동아리 코테이토 6주 차 세션에서 인증과 인가에 관한 주제를 다뤘었다. 나는 해당 동아리의 교육팀이기 때문에 세션 진행 전 발표자의 자료를 검토하고 동아리 부원들이 풀 문제를 출제하는 역할을 한다. 요번 주제가 프로젝트 첫 단계인 로그인 구현 부분과 밀접한 부분이 많아 관련 내용을 정리하고, 더 나아가 카카오 소셜로그인 api를 받아와 간단하게 로그인을 구현하는 방법에 대해서 정리하고자 한다.  인증과 인가인증 : 사용자의 신원을 검증하는 행위입니다. ex) 도서관 출입인가 : 사용자에게 특정 리소스나 기능에 액세스 할 수 있는 권한을 부여하는 프로세스입니다. ex) 데스크 출입 권한 인가는 인증을 받은 사용자가 할 수 있는..

Back-End/Project 2024.05.05

[OS] 임계구역

[OS] 임계구역 1. 전역 변수로 잠금을 구현한 코드 공유 변수 lock=false 상태로 해놓고, lock=true일때 임계구역 사용하기 전역 변수로 잠금을 구현한 코드의 문제 => 동시진입 상황, 공유변수가 하나면 안돼 => 상호배제보장 안됨, 임계 구역은 프로세스 하나씩만 접근해야 한다. 2. 상호 배제 조건을 충족하는 코드 공유변수 2개로 lock 걸기. 상호 배제 조건을 충족하는 코드의 문제 => 타임아웃으로 문맥 교환이 발생한다 => 교착 상태로 무한 대기 문제가 생긴다 => p1은 p2가 끝나길, p2는 p0가 끝나길 기다린다. 3. 상호 배제와 한정 대기 조건을 충족하는 코드 프로세스 번호를 가진 공유변수 하나를 준다. But, 진행의 융통성..

CS/OS 2024.05.01

[OS] 프로세스 동기화

[OS] 프로세스 동기화 학습목표 - 프로세스 간 통신의 개념을 이해하고 종류를 파악한다. - 공유 자원 사용 시 임계구역의 문제를 알아본다. - 임계구역 문제를 해결하기 위한 조건과 해결 방법을 알아본다. 공유 메모리나 공유 파일을 이용한 통신 - 일정한 메모리 영역이나 파일을 공유하고 이를 통해 데이터를 주고받는다. - 데이터를 주고받는 방법을 프로세스끼리 알아서 결정해야 하므로 가장 원시적인 방법이다. 파이프를 이용한 통신 - 프로세스 간 통신을 위해 운영체제가 제공하는 통신 기법 - ex) fork()로 만들어진 부모-자식 간 통신에 파이프 사용 소켓을 이용한 통신 - 네트워크로 연결된 컴퓨터에서 데이터를..

CS/OS 2024.04.30

[Kotlin] 액티비티 생명주기

[Kotlin] 액티비티 생명주기 프래그먼트가 액티비티처럼 동작하지만, 액티비티는 아니다.AndroidManifest.xml를 살펴보고 여러 개의 액티비티를 사용해 보자. 인텐트 : 컴포넌트를 실행하려고 시스템에 전달하는 메시지, 어떤 액티비티를 실행할 건지 결정함안드로이드의 컴포넌트 클래스라면 개발자가 코드에서 직접 생성해서 실행할 수 없습니다.시스템에서 인텐트의 정보를 분석해서 그에 맞는 컴포넌트를 실행해 줍니다.외부 앱의 컴포넌트와 연동할 때도 마찬가지입니다.  startActivity() 함수가 인텐트를 시스템에 전달Intent 생성자의 매개변수는 클래스 타입 래퍼런스 정보를 가진다.액티비티를 추가하면 manifest에 액티비티가 자동으로 등록된다. - MainActivity와 DetailActi..

Front-End/Kotlin 2024.04.27

[Kotlin] Material 라이브러리, 플로팅 버튼, Tab 레이아웃, 뷰페이저

[Kotlin] Material 라이브러리, 플로팅 버튼, Tab 레이아웃, 뷰페이저 이전에 사용되었던 viewpager와 별개로 2019년에 viewpager2를 제공하였다.항목이 순서대로 나열되어 있는데 한 화면에 항목 하나가 나오는 것을 viewpager2를 사용해 구현한다. 어댑터 : 여러 프래그먼트가 포함된 뷰를 제어할 수 있는 것으로 각 항목을 만들어 주는 역할을 한다.프래그먼트 어댑터 이용 : 프래그먼트로 작성했으면 FragmentStateAdapter로 뷰 페이저2를 구현 한다.class MyFragmentPagerAdapter(activity: FragmentActivity): FragmentStateAdapter(activity){ val fragments: List init{ ..

Front-End/Kotlin 2024.04.26

[Kotlin] Viewpager2, Recycler View, Layout Manager

[Kotlin] Viewpager2, Recycler View, Layout Manager  오랫동안 이용했던 viewpager와 별개로 2019년에 viewpager2를 제공하였다.항목이 순서대로 나열되어 있는데 한 화면에 항목 하나가 나온다는 개념이다.  어댑터 : 여러 프래그먼트가 포함된 뷰를 제어할 수 있는 것으로 각 항목을 만들어 주는 역할을 한다.프래그먼트 어댑터 이용 : 프래그먼트로 작성했으면 FragmentStateAdapter로 뷰 페이저 2를 구현 한다.class MyFragmentPagerAdapter(activity: FragmentActivity): FragmentStateAdapter(activity){ val fragments: List init{ fragmen..

Front-End/Kotlin 2024.04.25

[Kotlin] Action View 돋보기, 드로어, 토글, Fragment

[Kotlin] Action View 돋보기, 드로어, 토글, Fragment 뷰를 가지고 있다는 것은 코틀린 쪽에서도 제어가 가능하다는 것입니다. 액션 뷰는 액션바에서 특별한 기능을 제공하며, 대표적으로 androidx.appcompat.widget.SearchView가 있습니다. 서치 뷰 검색 기능 구현은 SearchView를 등록한 MenuItem 객체를 얻고 MenuItem 객체에 등록된 SearchView 객체를 구하면 된다. overrid fun onCreateOptionsMenu(menu: Menu): Boolean{ val inflater = menuInflater inflater.inflate(R.menu.menu_main, menu) val menuItem = menu?.findItem..

Front-End/Kotlin 2024.04.24
728x90