분류 전체보기53 Union-Find 알고리즘 정리 (feat. 프로그래머스 43162 네트워크) Union-Find란?Union-Find는 서로소 집합(Disjoint Set, 서로 분리된 집합)을 관리하는 대표적인 알고리즘이다.저번에 애를 먹었던 이분 그래프와 비슷하게 느껴지기도 한데..가장 크게 느껴진 건 일단 루트노드를 통해 '한 집합'에 속해있는지 찾는 것이었다.Union-Find의 목적“특정 원소들이 같은 그룹(집합)에 속해 있는지 빠르게 확인하고, 필요하다면 그 그룹을 하나로 병합한다.”네트워크 연결 여부 판별 (ex. 컴퓨터 네트워크)사이클 판별 (ex. 그래프가 트리인지 확인)최소 신장 트리(MST) 알고리즘 (ex. 크루스칼)문제 속 ‘그룹’ 개수 세기 (ex. 친구 관계, 소속 그룹 등)알고리즘 틀 만들기1. 초기화int[] parents = IntStream.range(0, n).. CS/자료구조&알고리즘 2025. 5. 15. Python 문자열 작성 시 주의! 복사 붙여 넣기 할 때 따옴표 문제 Python에서는 문자열을 '(따옴표) 또는 "(쌍따옴표)로 감싸서 작성한다.이때 Python은 이 따옴표를 기준으로 문자열의 시작과 끝을 구분한다.문제는 한글 프로그램, MS Word, 웹사이트 등에서 문자열을 복사해 붙여넣을 때 발생한다.이런 프로그램들은 문서를 보기 좋게 꾸미기 위해, 기본 따옴표 대신 굽은 따옴표(Smart Quotes)를 자동으로 사용한다.문제 상황MS Word나 한글에서는 "Hello"처럼 직선형 쌍따옴표 대신“Hello”처럼 굽은 쌍따옴표를 넣는다.하지만 Python은 " "(ASCII 코드 0x22)만 문자열 구분 기호로 인정한다.“ ”(유니코드 U+201C, U+201D) 같은 문자는 문자열의 시작이나 끝으로 인식하지 못한다.결국 코드 실행 시 SyntaxError가 발생.. 기타 개발&문제 해결 2025. 4. 28. 4시간만에 AI로 간단한 맞춤법 검사기 만들기(with Genspark.AI) '있으면 좋겠다'라고 막연히 생각했다요즘 블로그 플랫폼이나 자기소개서 작성 도구에는 맞춤법 검사기가 기본으로 탑재되어 있다.하지만, SNS에 짤은 글을 쓸 때나 완성된 글에 몇 문장만 추가할 때는 이야기가 달랐다.나는 원래 웹사이트를 수십 개씩 켜두는 편이다.그런데 단 몇 줄 고치려고 또 다른 웹사이트를 열고, 복사해서 붙여 넣고, 검사하고, 다시 돌아오는 과정이 번거롭게 느껴졌다.'짧은 문장 몇 개라도, 맞춤법을 빠르게 확인할 수 있으면 좋지 않을까?''눈으로 교정된 부분을 보는 것만으로도 글쓰기 실력이 조금은 향상되지 않을까?'그렇게 막연한 생각은 있었지만, 구체적인 방법은 전혀 알지 못했다.Genspark와 함께 시작구현 방법도 모른 채, 단순히 궁금한 것을 Genspark AI에 물어보았다.첫 질.. 기타 개발&문제 해결 2025. 4. 28. Poetry 가상환경 설정 중 python 경로 오류 해결하기 (No Python at path error) 오랜만에 Windows 데스크톱에서 Python 프로젝트를 만들 일이 생겼다.poetry로 깔끔하게 가상환경을 구성해두고 시작하려고 했는데, 시작부터 예상치 못한 오류가 발생했다.poetry init 명령어가 먹히질 않는 것. 뭐지 싶어서 터미널에 입력한 순간부터, 문제 해결 여정(?)이 시작됐다.문제 상황새로운 프로젝트 생성을 원했건만, 아래와 같은 메시지가 나왔다. (Windows, Git bash 사용)게다가 poetry의 어떤 명령어를 입력해도 모두 아래 메시지로 응답했다.No python at 'C:\Users\사용자명\AppData\Local\Programs\Python\Python39\python.exe'근데 현재 내 시스템에는 Python 3.9가 설치돼 있지 않고, 3.11만 설치된 상태.. 기타 개발&문제 해결 2025. 4. 25. Windows에서 MCP로 Cursor AI + PostgreSQL 연결해보기 최근 관심 있게 다뤘던 것 중 하나가 '쿼리 자동화'였다.개발자가 매번 복잡한 테이블 구조를 파악하고, 직접 쿼리를 처음부터 짜야 한다는 건 꽤 번거로운 일이다.그래서 요즘 핫하다는 MCP (Model Context Protocol) 를 활용해, AI가 테이블 구조를 직접 읽고 쿼리 초안을 짜주는 구조를 만들 수 있을지 실험해보기로 했다.기존 방식은 서버에서 테이블 정보를 읽어와서 프롬프트에 넣고 GPT API로 요청하는 식이었는데,이번엔 Cursor AI를 클라이언트로 사용하고, 여기에 MCP로 PostgreSQL을 연결해서 직접 테이블 구조를 탐색할 수 있게 구성해봤다.MCP 설정하기우선 PostgreSQL MCP를 CursorAI에 연결해 보기로 했다.MCP 서버는 PostgreSQL의 **테이블 .. 기타 개발&문제 해결 2025. 4. 8. 오픈소스 OCR 엔진 3개로 한글 인식률 비교하기 (PaddleOCR, EasyOCR, Tesseract) 최근 OCR 솔루션을 간단히 만들어볼 기회가 있었다. 아무래도 고객 서류가 워낙 많다 보니, 사람이 일일이 입력하기엔 무리가 있었고, 추후 OCR로 어느 정도 자동화할 수 있지 않을까 싶어서였다.상용 OCR 솔루션을 도입하기엔 결국 금융 쪽 폐쇄망에서 사용하기엔 부적합해서, 우선 무료 로컬 엔진 중 몇 개를 테스트해 보기로 했다. (세 가지 엔진 모두 Apache-2.0 license)PaddleOCR: 중국의 네이버, Baidu에서 만든 OCR 엔진으로 최근 중국 IT 부상에 따라 적용 도전EasyOCR: GitHub에서 꾸준히 관리되고 있는 엔진. 한글도 어느 정도 지원된다고 알려져 있다.Tesseract: OCR 엔진 하면 가장 먼저 떠오르는 이름. 오픈소스 OCR의 대표주자이번 실험은 “한글 인식.. 기타 개발&문제 해결 2025. 4. 7. Windows에서 localhost가 자꾸 IPv6(::1)로 잡힐 때 Vue.js로 프론트 작업을 하던 중, 로컬에서 서버랑 통신 테스트를 해야 했는데 이상하게도 내 컴퓨터에서만 localhost로 접근이 안 되는 상황이 생겼다..env 파일엔 분명 localhost:8080 이런 식으로 주소가 설정되어 있었고, 다른 개발자 분들은 아무 문제 없이 잘 되는 상태였다.그런데 나 혼자만 API 요청이 실패해서, 처음엔 단순히 서버 문제인가 했지만... 곧 내 PC 환경 문제라는 걸 깨달았다.문제 상황먼저 ping localhost 명령어로 테스트해보니, 이게 127.0.0.1이 아니라 ::1로 응답하더라.즉, Windows가 localhost를 IPv6 주소로 해석하고 있었던 것. 그런데 내가 띄운 백엔드 서버는 127.0.0.1 즉 IPv4에만 바인딩돼 있어서, 결국 연결이.. 기타 개발&문제 해결 2025. 4. 3. [📗자바 ORM 표준 JPA 프로그래밍] 다대일, 일대다, 일대일, 다대다 매핑 전략 1. 엔티티 연관관계 매핑 개요JPA에서 엔티티의 연관관계를 매핑할 때, 다음 세 가지를 고려해야 한다.다중성: 두 엔티티 간의 관계가 몇 대 몇인지 정의한다.다대일 (@ManyToOne): 가장 일반적인 관계.일대다 (@OneToMany): 한 엔티티가 여러 엔티티와 연결.일대일 (@OneToOne): 하나의 엔티티가 하나의 엔티티와만 연결.다대다 (@ManyToMany): 연결 테이블을 통해 구현.단방향 vs 양방향: 관계의 방향성을 설정한다.단방향: 한쪽 엔티티만 다른 쪽을 참조.양방향: 양쪽 엔티티가 서로를 참조.연관관계의 주인: 외래 키를 관리하는 엔티티를 설정한다.주인은 외래 키를 가진 테이블과 매핑된 엔티티이다.주인이 아닌 엔티티는 mappedBy를 사용해 주인을 지정한다.2. 다대일 관계 .. 백엔드 개발/JPA 2024. 11. 20. [📗자바 ORM 표준 JPA 프로그래밍] 양방향 연관관계 매핑 및 주인 정하기 지난 포스팅에서는 단방향 연관관계에 알아보았다. 이어서, 조금 더 복잡한 개념인 양방향 연관관계에 대해 알아보자.5.3 양방향 연관관계양방향 연관관계는 양쪽 엔티티가 서로를 참조하는 관계를 의미한다. 예를 들어, 회원(Member)이 하나의 팀(Team)에 속해 있다고 가정할 때, 단방향 관계에서는 Member가 Team을 참조하는 구조였다. 이제 팀도 해당 팀에 속한 회원들을 참조하도록 설정하여 양방향 관계를 만들어 보자.회원-팀: 다대일(N:1) 관계 / 회원 → 팀 (Member.team)팀-회원: 일대다(1:N) 관계 / 팀 → 회원 (Team.members)@Entitypublic class Member { @Id @Column(name = "MEMBER_ID") private .. 백엔드 개발/JPA 2024. 11. 13. [📗자바 ORM 표준 JPA 프로그래밍] 단방향 연관관계 매핑하기 엔티티 간 연관관계 개요엔티티들은 다른 엔티티와 연관관계를 갖는 경우가 많다. 예를 들어, 주문 엔티티는 상품 엔티티와 연관되고, 상품 엔티티는 또 다른 엔티티(카테고리, 재고 등)와 연관될 수 있다.객체는 참조를 사용해 관계를 맺는 반면, 데이터베이스는 외래 키를 사용해 관계를 설정한다. 이러한 차이로 인해 ORM에서 객체 간의 연관관계를 테이블 연관관계에 매핑하는 작업이 필요하며, 이를 적절히 이해하는 것이 중요하다.주요 개념방향 (Direction): 단방향과 양방향으로 구분된다.단방향: 엔티티가 하나의 방향으로만 다른 엔티티를 참조한다. 예를 들어, 회원 → 팀의 관계가 단방향 관계다.양방향: 양쪽 엔티티가 서로 참조한다. 회원 ↔ 팀의 관계가 양방향 관계이며, 양방향 관계에서는 양쪽에 참조 필드.. 백엔드 개발/JPA 2024. 11. 12. [📗자바 ORM 표준 JPA 프로그래밍] JPA의 기본 어노테이션과 테이블 매핑 @Entity - JPA 관리 대상 지정@Entity는 JPA를 사용해 특정 클래스가 데이터베이스의 테이블과 매핑되도록 지정하는 어노테이션이다. 이 어노테이션이 붙은 클래스는 JPA가 관리하며, 이를 엔티티라 부른다.@Entitypublic class Member { @Id private Long id; private String name;}속성name: JPA에서 사용할 엔티티 이름을 지정한다. 기본적으로 클래스 이름을 사용하지만, 패키지에 이름이 같은 엔티티 클래스가 있을 경우 이름을 지정하여 충돌을 방지할 수 있다.주의사항기본 생성자 필수: 엔티티 클래스는 protected나 public 기본 생성자를 반드시 가져야 한다. JPA가 엔티티를 인스턴스화할 때 기본 생성자를 사용하기 때.. 백엔드 개발/JPA 2024. 11. 11. [📗자바 ORM 표준 JPA 프로그래밍] 엔티티 매니저와 영속성 컨텍스트, 엔티티의 생명 주기 JPA의 엔티티 매니저(EntityManager)JPA에서 엔티티 매니저(EntityManager)는 엔티티의 저장, 수정, 삭제, 조회 등 엔티티와 관련된 모든 작업을 관리하는 관리자 역할을 한다. 애플리케이션에서 JPA를 사용할 때, 엔티티 매니저가 제공하는 메서드를 통해 데이터베이스와의 상호작용을 쉽게 할 수 있다.엔티티 매니저는 엔티티 매니저 팩토리를 통해 생성할 수 있으며, 엔티티 매니저 팩토리는 여러 스레드에서 안전하게 공유할 수 있다.하지만 엔티티 매니저는 스레드 안전하지 않기 때문에 요청마다 새로운 인스턴스를 사용해야 한다. 하나의 엔티티 매니저를 여러 스레드에서 동시에 사용하면 동시성 문제가 발생할 수 있다.// 엔티티 매니저 팩토리로부터 엔티티 매니저 생성EntityManagerFact.. 백엔드 개발/JPA 2024. 11. 10. 이전 1 2 3 4 5 다음