플러터(Flutter)에서 사용하는 다트(Dart)는 C언어의 영향을 받은 다른 언어들과 같이 다양한 반복문을 제공하고 있습니다. 특히 전통적인 for문의 경우 for 문, for-in 문, forEach 문까지 제공을 하는 모습을 보여줍니다. 이번 포스팅은 for문의 3가지 방법인 for문, for-in 문, forEach 문에 대해서 배워보고, 각각 장단점에 대해서 알아보도록 하겠습니다. For 문 우선 가장 기본적인 for문으로 세미콜론과 인덱스 값을 이용하여 반복을 하는 방식입니다. 사실 이 방식은 자유도 측면에서 가장 뛰어납니다. for(int i = 0; i < 10; i++) { print(i); } // 0 1 2 3 4 5 6 7 8 9 이 for문의 장점은 뭐니뭐니해도 특정 값에 따라 ..
플러터(Flutter)에서 사용하는 다트(Dart) 언어는 고수준 언어(ex: C, Java)와 유사하게 다양한 조건문을 제공하는데 가장 많이 활용하는 if ~ else 문부터 Switch 문 그리고 삼항 연산자를 제공합니다. 이번 포스팅은 가장 많이 사용하는 if ~ else if ~ else문에 대해서 알아보도록 하겠습니다. IF ~ ELSE 문 IF 조건문의 사용법 if (조건1) { // 실행해야 될 코드 } else if (조건2) { // 실행해야 될 코드 } else if (조건3) { // 실행해야 될 코드 } else { // 실행해야 될 코드 } if 조건문은 위와 같이 if 그리고 조건이 또 있을 경우 else if 를 필요한 만큼 사용하며, 그 외의 조건은 else를 사용합니다. i..
플러터(Flutter)에서 사용하는 다트(Dart) 언어는 고수준과 유사하게 다양한 조건을 위한 연산자들을 제공합니다. 2개의 값을 비교해서 같은지 아닌지를 비교하는 등가 연산자, AND와 OR를 체크하는 논리 연산자, 값이 크기를 계산하는 관계 연산자 등을 제공합니다. 조건을 위한 연산자의 종류 연산자 연산자명 >=, >, 크다 b); print(a
증감 연산자의 개요 증감 연산자는 값을 1 증가 시키거나, 1 감소 시키는 것을 뜻합니다. 증감 연산자는 비교적 오래된 언어(69년 B언어에서 최초 도입)들은 대다수 사용하고 있지만, 최근에 만들어진 언어(ex: Python)들은 대체가 있기 때문에 지원을 안하는 경우가 많습니다. 플러터에서 쓰이는 다트의 경우 아무래도 자바를 많이 참고해서 만든 느낌이 강하다보니 이 증감 연산도 지원하고 있습니다. 증감 연산자의 종류 연산자 용어 의미 ++값 전위 증가 값을 1 증가하고 처리 값++ 후위 증가 처리하고 값을 1 증가 --값 전위 감소 값을 1 빼고 처리 값-- 후위 감소 처리하고 값을 1 빼기 값을 1 증가 시키거나 1 감소 시키는데 종류가 4가지가 있는 것을 많이 혼란이 올 수 있습니다. 그리고 이 연..
for문은 Java 뿐만 아니라 다양한 언어에서 가장 많이 사용하는 상징적인 반복문입니다. 이번 포스팅에서는 for문의 사용 방법과 for문을 이용한 총합을 구하는 것을 만들어보고 이해해보겠습니다. for문 사용법 for (변수 초기화; 조건; 증감) { // 실행문 } for 문의 괄호() 사이에는 3가지의 식이 존재하는데 첫번째는 변수를 초기화 하고, 두번째는 참(True)이 되는 조건을 지정하며, 마지막으로 값을 증가 혹은 감소 시키는 공식을 넣습니다. 1~100까지의 합을 구하는 프로그램 public class Main{ public static void main(String[] args) { int sum = 0; for(int i = 1; i 1 홀수 -> 3 홀수 -> 5 홀수 -> 7 홀수..
자바의 Map형은 파이썬(Python)의 딕셔너리(Dictionary) 구조와 유사한 구조입니다. 복잡한 데이터를 저장하는 역할도 하지만, Key값과 Value형태로 이루어져서 데이터를 쉽게 찾아주는 역할도 수행합니다. 수많은 Map 형태의 구조중에 가장 많이 활용하는 것은 HashMap과 LinkedHashMap 정도가 될 수 있습니다. 물론 개발 업종에 따라 TreeMap이나 HashTable이 사용되기도 하지만, 일반적으로는 2가지가 가장 많이 활용이 됩니다. Map의 사용방법 map.put(키, 값);// 키와 값 저장 map.get(키);// 키를 기준으로 값을 가져온다 map.remove(키);// 키 값을 기준으로 값을 삭제한다 물론 위의 사용법보다 훨씬 많은 기능들이 있지만, 대표적으로 3..
자바의 Set형은 List와 유사한 형제같은 데이터형입니다. 그림 1에서 보다시피 Set과 List는 Collection이라는 interface의 하위 interface입니다. 그러다보니 list와 set은 사용법이 유사합니다. List와 Set의 차이점 List와 Set의 차이점은 List는 데이터를 저장하고 출력하는 것에 포커스를 둬서 동일한 데이터도 저장할 수 있다면, Set의 경우 데이터를 탐색하고, 중복되는 데이터를 제거하는 등의 기능이 있습니다. 리스트 예시 public static void main(String[] args) { String[] arrs = {"블랙핑크","BTS","블랙핑크"}; List list = new ArrayList(Arrays.asList(arrs)); Syste..
오늘은 List형에 대해서 알려드리도록 하겠습니다. 혹시 Python과 같이 자유로운 언어를 배우신 분들이라면, 자바의 List는 좀 어려울 수 있습니다. 파이썬과 다르게 좀 더 엄격하기 때문입니다. List는 구현된 객체가 아니라 interface로 되어 있어서 늘 List로 객체를 생성할 수 없습니다. interface가 무슨 소린가? 생각할 수 있는데 일단 interface는 껍데기와 같은 존재라고 생각하면 쉽습니다. 인터페이스는 중후반부 내용이기 때문에 여기서는 껍데기라는 정도로만 넘어가면 좋겠네요. List의 개념 List는 특정 타입형으로 이루어진 데이터를 연속으로 다룰 때 사용하는 타입입니다. 현재 여기서 글을 쓰는 것도 연속적인 단어들로 이루어져 있습니다. 즉 단어들만 데이터를 담고 싶을 ..
이모지(Emoji)는 웹페이지나 어플리케이션 같은 곳에서 감정이나 아이디어를 표현하는데 사용되는 작은 그림이나 아이콘입니다. 일본에서 개발되었으며 전 세계적으로 널리 사용되고 있습니다. 이모지는 웃는 얼굴, 눈물 흘리는 얼굴, 동물, 식물, 날씨 현상, 심볼 등 다양한 사물이나 감정을 표현하며 텍스트 대화에서 감정을 전달하는 데 유용합니다. 이모지는 유니코드 표준의 일부로, 다양한 디지털 플랫폼과 운영 체제에서 공통으로 인식하고 표현할 수 있습니다. 이모지는 텍스트 기반의 커뮤니케이션을 더 풍부하고 즐겁게 만드는 동시에, 문맥에 따라 다르게 해석될 수 있는 문제도 갖고 있습니다. 이모지는 위의 설명과 같이 유니코드(Unicode) 표준의 일부입니다. 이모지를 만들기 위해서 여러개의 유니코드가 필요하며, ..
MySQL에서는 sha256_password으로 비밀번호 컬럼을 저장하는 기능이 최근 버전에서 탑재되어 있지만, 여기서는 직접 SHA256 모듈을 호출해서 비밀번호를 저장해보도록 하겠습니다. Maven, pom.xml mysql mysql-connector-java 8.0.27 우선 MySQL에 연결하기 위해서 MySQL Connector/J 라이브러리를 Maven Pom.xml 파일에 Dependency로 추가합니다. Sha256, Java Code import java.security.MessageDigest; public class TestMain { public static void main(String[] args) { String password = "패스워드"; String hashedPas..
Java에서 JSON을 파싱하는 방법을 보통 많이 하겠지만, Map을 JSON으로 변환해야 되는 때도 있습니다. 예를 들어, POST로 데이터를 전송해야 할 때 JSON으로 String 값을 변환해서 전송하게 되면, 쉽게 처리가 가능한 장점등이 있기 때문이죠. 그리고 Java에서 Map을 JSON으로 변환하는 방법 또한 많이 있습니다만, 대부분 라이브러리를 사용해서 변환을 하는 것이기 때문에 여기서는 대표적인 라이브러리를 하나 소개하고 변환을 시켜보도록 하겠습니다. Jackson 라이브러리 만약 이 방식을 스프링부트(Spring boot)로 만든다면, Jackson 라이브러리는 별도로 설치하지 않아도 되는 경우가 많습니다. 하지만 라이브러리가 존재하지 않을 경우 아래와 같이 라이브러리를 추가하시면 됩니다..
Java에서 뭔가를 계산할 경우 NaN이 발생할 수 있습니다. 특히 공식이 복잡해지고 데이터의 예측이 힘들 경우 발생할 가능성이 높아지는데요. NaN은 왜 발생하고 어떻게 대처를 해야 하는지 알아보도록 하겠습니다. NaN의 뜻 우선 NaN이 무슨 뜻인지를 알아야 되겠죠. NaN은 영어로 Not a Number를 뜻합니다. 한마디로 숫자가 아니라서 숫자로 표현을 할 수 없는 상태를 말합니다. NaN 발생원인 NaN이 발생하는 경우는 값이 아닌 것을 계산할 때 발생하는데요. 0의 값을 0으로 나눴을 때 자주 발생되곤 합니다. NaN 발생 케이스 System.out.println(0.0f / 0.0f); System.out.println(Math.sqrt(-1.0f)); System.out.println(Ma..
가상환경 리스트 확인 conda info --envs 가상환경 삭제 명령 conda remove --name [가상환경명] --all 삭제 후 결과 (base) C:\Users>conda remove --name scientis --all (base) C:\Users>conda info --envs # conda environments: # base * e:\Anaconda3 scientist e:\Anaconda3\envs\scientist --envs로 확인을 하면 삭제가 된 것을 확인할 수 있다. 참고로 이렇게 안 지워질때가 종종 있는데 레지스트리에 등록되는 것이 아니니 직접 폴더를 지우는 방법도 있다. 아나콘다 설치 폴더의 envs 폴더로 가면 가상환경으로 만들어진 폴더들이 보일텐데 원하는 폴더를..
파이썬에서는 매우 간편하게 random 라이브러리를 사용하여 리스트를 섞을 수 있다. Random.shuffle 예시 import random my_list = ['삼성전자','LG전자','BTS','블랙핑크','YG'] random.shuffle(my_list) print('1 round->', my_list) # 1 round-> ['YG', 'BTS', '블랙핑크', '삼성전자', 'LG전자'] random.shuffle(my_list) print('2 round->', my_list) # 2 round-> ['LG전자', '블랙핑크', '삼성전자', 'YG', 'BTS'] 이와같이 shuffle을 반복할때마다 값을 계속 섞는다. 이 원리를 이용해서 로또 숫자를 뽑는 것도 매우 쉽게 만들 수 있다...
리스트 컴프리헨션(List Comprehension) 개념 Java와 C와 같은 언어들을 사용하다가 파이썬의 소스를 보다보면 가장 처음 당황하는 방식이 아마 리스트 캄프리헨션(List Comprehension)이라 생각한다. 파이썬은 수학적인 언어이다보니 기능들도 매우 수학적인데 이 기능은 리스트를 이용하여 새로운 리스트를 만드는 것이다. 그래서 이 기능을 잘 활용하는 사람은 파이썬을 매우 잘 사용하는(파이썬스럽게...) 사람이라 말을 할 수도 있을 것이다. List Comprehension example 짝수값 리스트 even_numbers = [x for x in range(10) if x % 2 == 0] print(even_numbers) # [0, 2, 4, 6, 8] range로 0 ~ 9까지..
정규 표현식을 사용할 때에는 메타 문자(meta characters)라는 것을 사용한다. []\.^$*+{}|() 이와같이 메타문자를 사용하여 다양한 정규표현식을 만들 수 있다. 개발을 하면서 모든 정규표현식을 익힌다는 것은 비효율적이며 그때그때 프로젝트에 따라 정규표현식을 사용하는 것이 유용하기 때문에 일단 하나씩 실습을 하면서 어떤 것이 가능한지만 익히는게 중요하다. 메타 문자 문자 설명 예시 [] A set of characters "[a-m]" \ Signals a special sequence (can also be used to escape special characters) "\d" . Any character (except newline character) "he..o" ^ Starts w..
프로젝트를 만든지 얼마 되지 않았고, Web 소스를 만든적도 없는데 아래와 같은 로그인 페이지가 떠서 당황스러울 수 있습니다. 내가 이런 페이지를 만들었었나? 생각 할 수 있지만, 이는 스프링 부트에서 만들어낸 자체적인 기능으로, 보안설정 때문에 아이디, 패스워드를 입력받는 페이지입니다. 이렇게 아이디 패스워드가 나오는 것이 보기 싫을 경우, 해제하는 방법이 있지만 우선 이번에는 아이디 패스워드를 입력하는 방법부터 알아보도록 하겠습니다. Using generated security password: 라고 콘솔창에 띄워져 있는 것을 볼 수 있는데요. 해당 부분의 값이 Password입니다. 그리고 id는 user가 됩니다. 위와 같이 입력을 하면, 정상적으로 넘어가는 것을 확인할 수 있습니다. 그리고..
Spring Boot에서 application.properties와 application.yml은 모두 어플리케이션의 구성 설정을 위한 파일이며, 둘간의 주요 차이점은 파일 형식과 구문에 있습니다. 둘간의 차이점을 알아보고, 각각에서 mysql과 mongodb 세팅의 차이점을 알아보도록 하겠습니다. 파일 형식 application.properties - 전통적인 프로퍼티 형식을 사용하며, 설정은 키 밸류 형태로, key=value 형식으로 표현됩니다. application.yml - YAML(Yet Another Markup Language 혹은 YAML Ain't Markup Language) 형식을 사용하며, 계층적이고 가독성이 높은 방식입니다. 구문 application.properties에서는 동..
여태까지 Spring-boot를 사용했던 케이스는 STS(Spring Tools Suite)을 사용하여 개발을 했었는데요. Java 어플리케이션은 IntelliJ로 개발을 하다보니, 어느덧 IntelliJ로 Spring-boot를 개발을 해봐야 겠다라는 생각을 가지게 되었습니다. 15년 가까이 Eclipse를 사용했지만, 이제는 놔줘야 될때가 온 것도 같습니다. 아직도 많은 SI 사이트들은 전자정부프레임워크를 사용할테지만, IntelliJ와 성능 차이가 너무 심하게 나서 저는 도저히 못쓸 것 같네요. 그럼 IntelliJ로 Spring 설정하는 법을 설명하도록 하겠습니다. Spring Boot 프로젝트 생성 IntelliJ를 실행한 후, New Project를 선택합니다. New Project 탭이 뜨면..
스프링 백엔드에서 데이터를 처리하거나 가지고 왔다면, 이 데이터를 View의 영역으로 전달을 해야 한다. 이때 View를 어떤 것을 사용할지 자유롭게 설정을 할 수 있는데 이 설정 역할을 하는 것이 View Resolver라고 생각하면 된다. 예를 들어 데이터를 API 형태로 제공하길 원한다면 View Resolver를 통해서 프론트엔드 프레임워크로 보내지 않고, JSON 형태(Json View 라고 함)로 전달해줄수도 있고, 한국에서 가장 많이 사용하는 Java 프론트엔드 언어인 JSP 페이지로도 보낼수도 있다. 이렇게 원하는 뷰 타입의 Dependency를 추가하게 되면 다양한 방식으로 보여줄 수 있는데 아래와 같은 View를 제공해주고 있다. View Type Thymeleaf - Dependenc..
MySQL 혹은 MariaDB에서 널(NULL) 값을 다른 값으로 교체를 하고 싶을 경우, 대표적으로 2가지의 방법을 활용하는데요. 2가지의 방법을 모두 활용해보고, 어떤 차이가 있는지 알아보도록 하겠습니다. IFNULL 함수 우선 NULL값을 가장 심플하게 처리하는 방법으로는 IFNULL이 있습니다. IFNULL은 2개의 인자를 받아서 첫번째 인자가 NULL값인 경우 두번째 인자로 대체하는 함수입니다. 간단히 생각해서 IFNULL(값, 대체값) 형식으로 사용되며, 여기서 값이 NULL일 경우 대체값으로 처리 되는 방식입니다. 사용 방식 SELECT IFNULL(column_name, '교체할값') From table_name; 예시 SELECT IFNULL(sales, 0) from sales_tabl..
DB에서 데이터 값이 존재하지 않을 경우 Null이라고 하고, 빈값일 경우 Empty라고 합니다. Null 체크 방법 MySQL에서 Null을 체크하기 위해서는 아래와 같이 IS NULL 아니면 IS NOT NULL을 사용 하면 됩니다. 컬럼 IS NULL 컬럼 IS NOT NULL 예를 들어, title이라는 컬럼에 Null 값이 들어올 수 있을 경우, title IS NULL 이라고 할 경우 title에 값이 없 경우를 지칭하며, title IS NOT NULL이라고 할 경우 title에 NULL값이 있는 경우를 지칭합니다. SELECT * FROM BOARD WHERE TITLE IS NOT NULL; 예를 들어 위와 같이 쿼리를 날릴 경우, BOARD라는 테이블(혹은 VIEW)에서 TITLE에 값..
MySQL 혹은 MariaDB에서 뿐만 아니라 오라클(Oracle) DB에서도 Group by는 존재합니다. 워낙 범용적으로 사용되고 데이터의 확인 용도 뿐만 아니라, 통계 등에 사용되기 때문에 필수로 알아야 될 쿼리(Query)인데요. 해당 쿼리에 대해서 알아보도록 하겠습니다. 그룹 바이(Group by) 우선 해당 쿼리문을 한번에 이해하기 보다는 하나씩 이해하는 편이 좋습니다. 그룹바이라는 쿼리는 데이터를 기준이 되는 값으로 그룹을 묶어서 보여줘라라는 뜻입니다. 해당의 쿼리는 예제를 보면서 확인해보도록 해보죠. stock_nm|country|exchange| --------+-------+--------+ 삼성전자 |korea |KOSPI | 카카오 |korea |KOSPI | 네이버 |korea |..
테이블 생성하는 방법은 많은 DB Tool들이 대다수 지원을 하는 것이지만, 본 포스팅은 대표적인 Mysql(혹은 MariaDB) 무료 툴중 하나인 DBeaver로 설명을 해보도록 한다. 만약 DBeaver를 설치하지 않았다면, 아래 링크를 들어가서 먼저 DBeaver를 설치하고 다시 돌아오면 좋을 것이다. 무료 DB Tool, DBeaver (디비버) 무료 DB Tool, DBeaver (디비버) 디비버(DBeaver)는 무료로 사용할 수 있는 DBMS 툴과 동시에 다양한 DBMS를 핸들링할 수 있다. 일반적인 관계형 DBMS의 경우 JDBC API를 사용하여 JDBC 드라이버를 통해 데이터베이스와 통신하며, NoSQL의 needneo.tistory.com 디비버를 모두 설치하였다면, 데이터베이스를 접..
MySQL 혹은 MariaDB를 설치하였다면, 제일 처음 해야 할 일은 작업을 해야 할 공간인 데이터베이스(Database)를 생성하는 것이다. 일반적으로 데이터베이스는 프로젝트 단위로 생성하는 것이 일반적이지만, 프로젝트들이 서로 연결이 되는 경우 하나의 거대한 데이터베이스를 사용하기도 한다. 데이터베이스가 서로 다를 경우, 즉 다른 데이터베이스에 있는 테이블들은 같이 사용할 수 없기(편법이 있긴 하지만) 때문에 즉 같이 써야 하는 테이블들은 한 데이터베이스에 뭉쳐놔야 한다는 점을 잊지 말도록 한다. MySQL Client 접속 MySQL로 검색을 하든지 설치한 앱을 찾아서 직접 실행을 하든지 그림 1.의 MySQL Client를 클릭한다. Root 비번을 입력하면, 그림 2와 같이 명령어들을 실행할 ..
인덱스 리스트 명령어 curl -XGET http://localhost:9200/_cat/indices 결과 C:\Users\steel>curl -XGET http://localhost:9200/_cat/indices yellow open test-index wNb0z1QRQTOJdlsY7fzCuA 1 1 1 0 4.6kb 4.6kb green open .apm-custom-link Nn5uCq1kScqbQyXwPG8HMQ 1 0 0 0 208b 208b green open .kibana_task_manager_1 Qn0h-L0-QcaGly3Q58Dcig 1 0 5 0 76kb 76kb green open .apm-agent-configuration 62kQfIVrSdKVHXvtM74Ypg 1 0 0 0..
x를 제곱하여 a가 되었다면, x를 a의 제곱근이라고 하는 것은 다 알고 있을 것이다. 이 포스팅을 찾으셨다면 당연히 루트(√)를 몰라서 찾는게 아니라 파이썬에서 어떻게 사용하는지를 알고 싶을 것이다. 기본적인 방법 파이썬에서 기본적으로 루트를 하는 방식은 당연하게도 제곱(**)을 이용한 방식이다. # 2의 루트 print("2의 루트 : ", 2**(1/2)) 2의 루트 : 1.4142135623730951 이와같이 제곱근을 연산하고 싶은 값을 입력하고** (제곱을 수행한 후) (1/2)의 값을 곱한다. 정석적인 제곱근을 구하는 방식이니 누구나 쉽게 이해를 할 것이다. Math 라이브러리 방식 그리고 파이썬에서는 수학 라이브러리인 Math를 이용해서 제곱근을 구할 수도 있다. import math # ..
날짜값들의 차이를 구하는 방법이 하나만 있는게 아닌데 우선 매우 간단한 DAYS부터 설명해도록 하겠습니다. DAYS 함수 (일수 계산) DAYS는 날짜값간의 차이를 일수로 리턴해주는 매우 심플한 함수입니다. 사용법 DAYS(date1, date2) 이처럼 2개의 인자값을 넣어주면, 해당 날짜간의 차이를 리턴합니다. 참고로 첫번째 날짜가 두번째 날짜보다 더 이전이면, 음수값이 리턴이 됩니다. 그러니 첫번째 값에 더 최근의 값을 넣고, 뒷값에 이전값을 넣는 방식을 하거나 계산 이후 절대값 함수(ABS)를 호출하면 됩니다. 위 이미지를 보면, A1이 A2보다 날짜가 더 이전이다보니 연산 결과가 음수로 나왔습니다. 이렇게 음수값이 나와도 최종적으로 ABS를 붙이면 양수로 변환이 되니, 날짜 계산을 할 때에는 A..
이클립스(Eclipse) 기반으로 프로젝트를 하다보면 수시로 켜지는 validation으로 발암을 유발하는 경우가 많습니다. 사실 validation은 꺼도 개발하는데 큰 지장이 없으며, 개발 막바지에 켜도 상관이 없기 때문에 이클립스의 최적화라 할 수 있는 validation 끄는 방법에 대해서 소개해 보고자 합니다. 이클립스의 Validation 사실 아이러니하게도 Validation은 개발을 도와주는 작업입니다. validation은 코드의 문법적인 오류, 실행 전에 발생할 수 있는 예외, 형식 불일치 등을 사전에 확인하고, 개발자에게 알려주는 역할을 합니다. 이를 통해 빌드 시간을 줄이고, 더 효율적인 개발을 도와줍니다. 하지만 위와 같은 문제가 크게 없을 경우 Validation은 오히려 개발 ..
파이썬으로 작성된 파일을 실행할 때 인수(argument, 인자값)를 받아서 처리를 해야 되는 경우가 있다. 예를 들어, 로컬과 개발 등의 환경이 서로 달라서 인자값을 줘야 한다던지 같은 파일을 다른 목적으로 처리를 해야 할 때 인자값을 줄 수가 있을 것이다. 이럴때 파이썬에서는 sys.argv에 값을 담아 처리를 할 수 있게 된다. sys.argv에서 sys는 파이썬 인터프리터와 관련된 정보와 기능을 제공하는 모듈 혹은 라이브러리이며, argv는 위에 적은 것처럼 argument를 의미한다. 예시 python hello.py neo 첫번째로 위와 같은 command에서 실행을 한다고 가정을 하며 hello.py 다음에 1개의 인자값을 줬는데 neo라는 인자값이다. 이 인자값을 어떻게 프로그램이 처리를 ..
파이썬에서는 일반적으로 urllib, requests, httpslib 등의 모듈을 사용하여 웹 서버와 통신하게 됩니다. 이러한 모듈을 사용하여 SSL/TLS 보안 연결을 설정할 때 신뢰할 수 있는 인증서를 사용해야 합니다. 일반적으로 집이나 보안이 강한 곳이 아닌 경우 문제가 되지 않지만, 회사와 같은 강력한 보안이 되어 있는 네트워크에서 접근 할 경우 SSL 에러가 발생할 수 있습니다. 이를 해결하기 위해서는 5가지 방법이 존재하는데 알아보도록 하겠습니다. 인증서 업데이트 우선 가장 기본적인 해결책으로 SSL 인증서를 업데이트 하는 것입니다. 이미 인증서를 가지고 있지만 만료되었거나 유효하지 않을 경우 SSL 에러가 발생할 수 있는데 이럴 경우 인증서를 업데이트 하는 것으로 문제를 해결할 수 있습니다..
인텔리J(Intellij)로 Spring boot를 사용하여 Java Application을 만드는 와중, 인텔리J에서 직접 실행을 할 때에는 이상이 없었으나, Jar로 빌드를 한 후 실행을 하게 되면, Could not find com.mysql:mysql-connector-j 위와 같은 에러 문구가 뜨면서 실행이 되질 않았다. 그렇게 원인을 찾아본 순간, 내 Gradle 설정에 MySQL Connector가 2개 중복 설정이 되었다는 것을 깨달았다. 그리고 이렇게 중복으로 설정된 가장 큰 원인은 MySQL Connector가 버전에 따라 패키지 명이 바뀌게 되면서 인지를 하지 못했기 때문이었다. MySQL 8.0.31 이전 버전우선 예전부터 내가 자주 사용하였던, 8.0.31 이전 버전의 커넥터는 ..
스프링 부트로 프로젝트를 생성한 후, RestController를 사용해야 돼서, 어노테이션을 걸었지만 해당 어노테이션관련 라이브러리 Import가 되질 않았다. 내가 설치한 Dependency는 아래와 같았는데 RestController는 당연히 기본적으로 적용이 될거라 생각한 나의 착각이었다. 스프링부트가 아닌 일반적인 스프링 기반으로 프로젝트를 할 경우 아무런 문제없이 라이브러리가 추가되었었기 때문이었다. 디펜던시(Dependencies) 추가 원인을 찾은 결과 spring-web을 설치해야 하는데 나는 web을 rest와 연관지어 생각지 못했기 때문에 web을 추가하게 되었다. implementation 'org.springframework.boot:spring-boot-starter-web' 위..
에러 메세지 D:\anaconda3\envs\gpt\python.exe D:/gpt/_openai.py Traceback (most recent call last): File "D:\anaconda3\envs\gpt\lib\site-packages\aiohttp\client_reqrep.py", line 70, in import cchardet as chardet ModuleNotFoundError: No module named 'cchardet' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:/gpt/_openai.py", line 2, in impor..