no image
HTTPS, SSL 인증서
HTTP - Hypertext Transfer Protocol (html을 전송하기 위해서 만들어진 통신 규약) 도메인이나 url을 입력할 때 http:// < 라고 적는 것이 이런 이유임 HTTPS에서 S는 Over Secure Socket Layer의 약자다. 보안 장치가 결합되어 있는 통신 방식임. http에서 데이터를 전송하게 되면 제 3자가 감청하고 조착하거나 털릴 수 있음 그런 것을 방지하기 위한 포괄적인 기술 체계를 https 라고 생각하면 됨 그래서 https를 사용하게 되면 데이터가 암호화 되기 때문에 제 3자가 도청할 수 없게 됨 HTTPS와 SSL의 차이점 같다면 같고 다르다면 다름 SSL 위에서 HTTPS가 돌아감 SSL / TLS (같은 거) 대부분 SSL 이라고 부름 ㅡㅡㅡㅡㅡㅡ..
2022.01.19
no image
[Excel] 다른 행에서 같은 값 찾아서 특정 값 삽입하기
target concept id가 필요한 상황인데 숫자가 깨져 버렸다 다시 매핑해야 하는 상황 DB 였으면 update 문으로 바꿨을 텐데 그럴 수 있는 상황이 아니니 원본 csv에서 처리를 해야 한다 엑셀 찌끄레기는 구글링을 겁나게 하기 시작했다.......... 역시 엑셀은 없는 게 없는 듯 근데 극혐 저거 어떻게 검색해야 하는지 키워드도 몰라서 같은 값 찾아서 변경 동일 행 변경 이딴 거 엄청 치다가 겨우 찾았다 이래서 검색도 능력이라고 하는 거다 어차피 컴활은 필요 없을 것 같아서 안 땄는데 이런 것도 몰라서 구글링 한다는게 기본이라도 좀 해야겠다 초반 같은 상황은 B열과 E 열이 1:1 매칭이라 B와 E가 같으면 A를 D에 넣으면 되니 IF 문으로 같으면 삽입하는 걸로 복붙하면 되겠다 생각했는데..
2022.01.19
DBeaver postgresql 대용량 csv 한글 깨짐 현상
utf-8인 csv를 dbeaver로 적재했을 때 한글이 깨지게 되는 현상이 나타난다 (pgadmin도 마찬가지) 구글에 찾아보면 csv를 메모장으로 열어서 인코딩을 ANSI -> UTF8로 고친 후에 적재하라고 하는데 나는 레코드가 삼천만 개 정도 되어서 메모장에서 열리지 않는다...... csv 분할도 해 보고 다른 인코딩 방법을 찾았는데 원본 파일 바로 한글 깨지지 않게 적재하는 방법 알아냄 인코딩을 EUC_KR로 바꿔서 하면 된다 ㅎ
2021.07.30
no image
npgsql timeoutException
Npgsql.NpgsqlException: 'Exception while reading from stream' TimeoutException: Timeout during reading attempt npgsql timeout during reading attempt DB connection 후 코드 인으로 쿼리를 때려 박고 DataAdapter 에 저장하고 DataSet에 넣어야 하는데 쿼리 돌리는 속도가 오래 걸려서인지 계속 timeout 예외가 떴다 처음에는 서버 문제인 줄 알아서 postgresql을 다시 연결해 준 다음에 실행하니 dataset에 문제없이 해당 데이터가 담겼었다. 그런데 분명히 같은 select 문이었음에도 불구하고 또 같은 에러가 뜨는 것이다........... 왜 됐다가 안 되..
2021.07.29
no image
postgresql-x64-12 - PostgreSQL Server 12 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다
또 말썽이다....... ETL을 배치 프로그램 이용해서 만들고 있었는데 C#에서 쿼리가 dataset으로 안 받아와지고 해당 오류가 뜨길래 Npgsql.NpgsqlException: 'Exception while reading from stream' TimeoutException: Timeout during reading attempt npgsql timeout during reading attempt 무엇인가 하니 forums.servicestack.net/t/postgresql-timeout/6289 해당 주소를 참고하여 서버 문제인 것을 알았다 같이 일하시는 분이 공유기 아이피를 바꿔버림 아 ㅋㅋ 1. 윈도우 + R services.msc 처음에는 postgresql-x64 눌렀을 때 서비스 시작..
2021.07.29
DBeaver 실행 시 오류 log error
dbeaver로 postgresql 작업을 하다가 갑자기 에러창이 뜨면서 log 파일을 확인하라는 메세지가 떴다. ide 켜지지도 않고 이유 찾아보다가 포기하고 이틀 정도 그냥 pgadmin으로 작업한 듯...... 이대로는 안 되겠다 싶어서 구글링으로 다시 찾아보니까 겨우 찾았다 근데 별문제 아니었음 dbeaver를 실행시키면 이런 경고창이 뜨고 꺼진다 See the log file C:/Users/user/AppData/Roaming/DBeaverData/workspace6/.metadata/.log" 해당 경로에 가서 log 파일을 확인해 보면 Caused by: java.lang.Exception: 호환되지 않는 파일 형식입니다. 작업공간이 호환되지 않는 0 버전으로 저장되었습니다. at org...
2021.07.28
no image
05-1 MSSQL - ASP.NET CORE 연동
local 접속 후 데이터베이스 계정 로그인 안 될 때 -> hannom.tistory.com/195 참고 using System.Data.SqlClient; using System.Data; // using 등록해야 할 것들 public IActionResult TicketList() { var dt = new DataTable(); // 다른 곳에서 참조가 되면 남아 있을 수 있기 때문에 명시적으로 코딩 하는 게 좋음 (using) using (var conn = new SqlConnection("Server=DESKTOP-2H5KO6N\\SQLEXPRESS;Database = myweb;User ID = sa;password = sa1234")) { conn.Open(); #region [sql 구..
2021.03.05
no image
05 - Database 연동
1. why use Database - 모든 데이터는 메모리에서 적재되어 이용됨 - 웹서버 생명주기 모델에 따라 대부분의 경우 Response 후 제거 - TempData, Cache 등으로 생명주기를 늘릴 수 있으나, 웹서버 종료 시 삭제됨 2. 영속성(Persistence) - 메모리가 아닌 별도의 저장공간을 이용하여, 영구적인 저장을 가능하도록 함 - 영속성이라는 의미는 데이터의 불변성이 아님 - 즉, 서버를 껐다 켜도 데이터가 살아 있느냐를 생각해 보면 된다. (웹서버 IIS나 Tomcat 같은 것) 데이터 베이스 서버 (Maria DB, oracle, MSSQL... ) RDBMS 3. MariaDb - License 문제에서 자유로움 - MS-SQL Express 또는 Oracle XE 가 있..
2021.03.04

 

HTTP - Hypertext Transfer Protocol (html을 전송하기 위해서 만들어진 통신 규약)

도메인이나 url을 입력할 때 http:// < 라고 적는 것이 이런 이유임

 

HTTPS에서 S는 Over Secure Socket Layer의 약자다. 보안 장치가 결합되어 있는 통신 방식임. 

 

http에서 데이터를 전송하게 되면 제 3자가 감청하고 조착하거나 털릴 수 있음

그런 것을 방지하기 위한 포괄적인 기술 체계를 https 라고 생각하면 됨 

 

그래서 https를 사용하게 되면  데이터가 암호화 되기 때문에 제 3자가 도청할 수 없게 됨

 

HTTPS와 SSL의 차이점 

 

같다면 같고 다르다면 다름 

SSL 위에서 HTTPS가 돌아감 

 

 

SSL / TLS (같은 거) 대부분 SSL 이라고 부름 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

SSL 디지털 인증서 

 클라이언트와 서버간의 통신을 제3자가 보증해 주는 전자화된 문서 

 

  • 통신 내용이 공격자에게 노출되는 것을 막을 수 있다 

        -> 암호화가 필요 

  

대칭키 openssl 이라는 소프트웨어를 이용해서 암호를 복호화, 암호화 함 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

target concept id가 필요한 상황인데 숫자가 깨져 버렸다 다시 매핑해야 하는 상황 

DB 였으면 update 문으로 바꿨을 텐데 그럴 수 있는 상황이 아니니 원본 csv에서 처리를 해야 한다 

 

엑셀 찌끄레기는 구글링을 겁나게 하기 시작했다.......... 역시 엑셀은 없는 게 없는 듯 근데 극혐 

저거 어떻게 검색해야 하는지 키워드도 몰라서 같은 값 찾아서 변경 동일 행 변경 이딴 거 엄청 치다가 겨우 찾았다 이래서 검색도 능력이라고 하는 거다 

 

어차피 컴활은 필요 없을 것 같아서 안 땄는데 이런 것도 몰라서 구글링 한다는게 기본이라도 좀 해야겠다 

 

초반 같은 상황은 B열과 E 열이 1:1 매칭이라 B와 E가 같으면 A를 D에 넣으면 되니 IF 문으로 같으면 삽입하는 걸로 복붙하면 되겠다 생각했는데 밑부분으로 가니 E열에 같은 코드들이 몇 개 있었다 < 그래서 기존 수식은 사용 불가 

 

 

본론부터 말하면 구글링으로 찾아보니 방법이 있다. https://bamdule.tistory.com/50 감사합니다 

 

완성띠 오른쪽 하단 십자가 눌러서 밑으로 주르륵 내려 주면 끝이다 

간단한 작업할 땐 디비보다는 엑셀이 편하지 ㅇㅇ 

 

= INDEX(A:A, MATCH(E2, B:B, 0), 1)

 "A열을 복사할 값으로 지정하고, E2열과 B 전체 열의 범위를 비교해서 같으면 해당 컬럼에 A 값을 넣어라" 라는 뜻이다

 

부가 설명 

 INDEX & MATCH 라는 함수가 있다 

 비교 열이랑 비교 열 범위라고 하니까 좀 헷갈려서 나는 내 데이터 특성 상 그냥 key - value 라고 이해했다.

왼쪽이 원본 key-value, 오른쪽이 내가 바꾸고 싶은 key-value => value를 비교해서 동일하다면 원본 key를 복사한다. 

=INDEX(바꿔줄 값, MATCH(비교 열(바꿔지는 값의 key), 비교 열 범위(원본 value), 0),1)

 

 

utf-8인 csv를 dbeaver로 적재했을 때 한글이 깨지게 되는 현상이 나타난다 (pgadmin도 마찬가지) 

 

구글에 찾아보면 csv를 메모장으로 열어서 인코딩을 ANSI -> UTF8로 고친 후에 적재하라고 하는데 나는 레코드가 삼천만 개 정도 되어서 메모장에서 열리지 않는다...... 

 

csv 분할도 해 보고 다른 인코딩 방법을 찾았는데 원본 파일 바로 한글 깨지지 않게 적재하는 방법 알아냄 

인코딩을 EUC_KR로 바꿔서 하면 된다 ㅎ 

Npgsql.NpgsqlException: 'Exception while reading from stream'

TimeoutException: Timeout during reading attempt

npgsql timeout during reading attempt

 

 

DB connection 후 

코드 인으로 쿼리를 때려 박고 DataAdapter 에 저장하고 DataSet에 넣어야 하는데 쿼리 돌리는 속도가 오래 걸려서인지 계속 timeout 예외가 떴다 

 

처음에는 서버 문제인 줄 알아서 postgresql을 다시 연결해 준 다음에 실행하니 dataset에 문제없이 해당 데이터가 담겼었다. 그런데 분명히 같은 select 문이었음에도 불구하고 또 같은 에러가 뜨는 것이다........... 왜 됐다가 안 되는지는 잘 모르겠지만 아마 메모리 누수 때문일 수도 있고 리소스 많이 잡아 먹어서 그럴 수도 있다. 

 아무튼 서버 문제도 아니니 해결 방법은 시간을 늘려주는 것이니 connection 부분에서 시간을 늘려 주었다. 

 

Timeout, CommandTimeout 을 각각 넣어주면 정상적으로 실행이 된다 

 

짜면서도 너무 비효율적이라 짜증나는데 개선 방법에 대해서 좀 생각해 봐야겠다......

 

'Develop > C#' 카테고리의 다른 글

DataTable에서 해당하는 값 찾기  (0) 2022.05.18
C# winform 동적으로 탭 추가하기  (0) 2022.05.09

또 말썽이다....... 

ETL을 배치 프로그램 이용해서 만들고 있었는데 C#에서 쿼리가 dataset으로 안 받아와지고 해당 오류가 뜨길래  

Npgsql.NpgsqlException: 'Exception while reading from stream'

TimeoutException: Timeout during reading attempt

npgsql timeout during reading attempt

 

무엇인가 하니 forums.servicestack.net/t/postgresql-timeout/6289 해당 주소를 참고하여 서버 문제인 것을 알았다 

같이 일하시는 분이 공유기 아이피를 바꿔버림 아 ㅋㅋ 

 

 

1. 윈도우 + R services.msc

처음에는 postgresql-x64 눌렀을 때 서비스 시작밖에 안 떠 있었다

서비스 시작을 계속 눌러줘도 다음과 같은 에러창이 뜨는데 이 단계로 오지 않았다면 서비스 중지 후 다시 시작을 눌러주면 해결이 될 것 같다

첫 번째 방법 해결 X 

 

2. 작업관리자 - 서비스 탭 - postgresql 찾기 

 시작 눌러 주면 상태가 시작 중으로 바뀌면서 정상 작동이 된다....... 

 

3. 그래도 안 될 때 

~PATH\PostgreSQL\12\data  data 폴더에 postmaster.pid 를 삭제하고 1, 2 번 진행 

dbeaver로 postgresql 작업을 하다가 갑자기 에러창이 뜨면서 log 파일을 확인하라는 메세지가 떴다. 

ide 켜지지도 않고 이유 찾아보다가 포기하고 이틀 정도 그냥 pgadmin으로 작업한 듯......

 

이대로는 안 되겠다 싶어서 구글링으로 다시 찾아보니까 겨우 찾았다 근데 별문제 아니었음 

 

dbeaver를 실행시키면 이런 경고창이 뜨고 꺼진다 

See the log file C:/Users/user/AppData/Roaming/DBeaverData/workspace6/.metadata/.log"

 

해당 경로에 가서 log 파일을 확인해 보면 

Caused by: java.lang.Exception: 호환되지 않는 파일 형식입니다.  작업공간이 호환되지 않는 0 버전으로 저장되었습니다.
at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42)
at org.eclipse.core.internal.resources.ResourceException.<init>(ResourceException.java:38)
... 50 more

등이 나오는데 해결 방법은 간단하다

 

1. 

%HOMEPATH%/.dbeaver/.metadata/.plugins/org.eclipse.core.resources /.snap 

를 찾아서 .snap 삭제 

 

2. .snap이 없는 경우 

 - org.eclipse.core.resources  폴더 삭제 

 

3. 1, 2 번을 해도 안 될 때 

 - .metadata 삭제 

3번은 삭제 시 dbeaver 데이터 소스 연결 스크립트나 일부 구성이 삭제될 수 있음을 유의 

 

보통 2번까지 하면 정상적으로 dbeaver가 뜬다

 

 

 

 

mssql 테이블 생성

 

local 접속 후 데이터베이스 계정 로그인 안 될 때 

-> hannom.tistory.com/195 참고 

using System.Data.SqlClient;
using System.Data;
// using 등록해야 할 것들 


public IActionResult TicketList()
        {
            var dt = new DataTable();

            // 다른 곳에서 참조가 되면 남아 있을 수 있기 때문에 명시적으로 코딩 하는 게 좋음 (using)
            using (var conn = new SqlConnection("Server=DESKTOP-2H5KO6N\\SQLEXPRESS;Database = myweb;User ID = sa;password = sa1234"))
            {
                conn.Open();

                #region [sql 구문 작성법]
                /*
                 * string sta = "ddd"
                 WHERE 구문에서 a.status = sta + '%' 이런 식으로 쓰면 안 되는 이유 
                -> 사용자가 악의적으로 sta 변수에 OR '1' = '1' 같은 변수를 넣었을 경우 select 문으로 테이블의 모든 값을 조회할 수 
                있기 때문에 보안상으로도 올바르지 않음 (sql 해킹법으로 많이 쓰인다) 
                 */
                #endregion

                using (var cmd = new SqlCommand())
                {
                    string status = "In Progress";
                    cmd.Connection = conn;
                    cmd.CommandText = @"
                                        SELECT
	                                        A.ticket_id
	                                        ,A.title
	                                        ,A.status
                                        FROM 
	                                        t_ticket A
                                        WHERE 
	                                        A.status = @status 
                                        ";

                    cmd.Parameters.AddWithValue("@status", status);

                    var reader = cmd.ExecuteReader(); // READ 부분 select~ 
                    dt.Load(reader);
                    
                    //cmd.ExecuteNonQuery(); // CURD 처리 부분 (insert, update, delete) int 값 반환
                }
            }
            ViewData["Dt"] = dt;

            return View();
        }

- HomeController.cs

DB 연동 방법 다양함. appsettings.json에서 바로 연동해 주는 방법이 있고, 해당 페이지에서만 연동해 주는 방법이 있는데

해당 페이지에서만 연동하는 방법으로 HomeController에서 ticketList 페이지에서만 ticket 테이블 조회할 수 있도록 연동

 

 

@{ 
    var dt = ViewData["dt"] as System.Data.DataTable;
}

-- 해당하는 html의 cshtml 위에 데이터 테이블 전달 

  <tbody>
    @foreach(System.Data.DataRow row in dt.Rows)
    {
      <tr>
        <td>@row["status"]</td>
        <td>@row["title"]</td>
        <td>@row["ticket_id"]</td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
      </tr>
    }
</tbody>

Ticket.cshtml 

-> 데이터를 표시할 부분에 전달 

 

기본적인 데이터 구조는 이렇게 흘러감

MVC의 Model을 사용해서 쓰는 방법 필요

'Develop > ASP.NET CORE' 카테고리의 다른 글

05 - Database 연동  (0) 2021.03.04
04 - Layout 구성  (0) 2021.03.04
03 - 데이터 전달  (0) 2021.03.03
02 - MVC 프로젝트 생성  (0) 2021.03.03
01 - ASP.NET CORE 시작하기  (0) 2021.03.03

1. why use Database

  - 모든 데이터는 메모리에서 적재되어 이용됨

  - 웹서버 생명주기 모델에 따라 대부분의 경우 Response 후 제거 

  - TempData, Cache 등으로 생명주기를 늘릴 수 있으나, 웹서버 종료 시 삭제됨

 

2. 영속성(Persistence)

  - 메모리가 아닌 별도의 저장공간을 이용하여, 영구적인 저장을 가능하도록 함

  - 영속성이라는 의미는 데이터의 불변성이 아님

  - 즉, 서버를 껐다 켜도 데이터가 살아 있느냐를 생각해 보면 된다. 

 

(웹서버 IIS나 Tomcat 같은 것) 

데이터 베이스 서버 (Maria DB, oracle, MSSQL... ) RDBMS

 

영속성 개념 

3. 

MariaDb - License 문제에서 자유로움

            - MS-SQL Express 또는 Oracle XE 가 있으나 제약이 큼 

            - ANSI SQL 기준으로 쿼리를 만들 것이므로 다른 DB에도 쉽게 적용이 가능하다. 

 

-> 우리는 DB MSSQL로 진행 

 

4. ADO.NET 예제 

   - CRUD(Create, Read, Update, Delete) 예제 

 

5. Dapper 예제

  - ADO.NET 로 만든 CRUD 를 Dapper로 변경 

 

 

JAVA - DB 연결 

  1. JDBC

  2. JDBC mybatis ibatis

  3. JDBC Hibernate (DB에 있는 테이블이나 컬럼들이 하나의 오브젝트고, 프로퍼티가 되는 것. 그것을 자바 코드와 연결해서 매핑시켜 줌) 

 

 C#에서 DB 연결하는 방법

   1. ADO.NET (가장 기본적인 DB 연결 방식) 

using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString =
            "Data Source=(local);Initial Catalog=Northwind;"
            + "Integrated Security=true";

        // Provide the query string with a parameter placeholder.
        string queryString =
            "SELECT ProductID, UnitPrice, ProductName from dbo.products "
                + "WHERE UnitPrice > @pricePoint "
                + "ORDER BY UnitPrice DESC;";

        // Specify the parameter value.
        int paramValue = 5;

        // Create and open the connection in a using block. This
        // ensures that all resources will be closed and disposed
        // when the code exits.
        using (SqlConnection connection =
            new SqlConnection(connectionString))
        {
            // Create the Command and Parameter objects.
            SqlCommand command = new SqlCommand(queryString, connection);
            command.Parameters.AddWithValue("@pricePoint", paramValue);

            // Open the connection in a try/catch block.
            // Create and execute the DataReader, writing the result
            // set to the console window.
            try
            {
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}\t{2}",
                        reader[0], reader[1], reader[2]);
                }
                reader.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }
    }

  2. Enterprise Library

    - ADO.NET에서 불편했던 내용들을 보완한 것 

    - 개발자가 직접 쿼리를 작성해야 한다

  3. EntityFramework (엔티티 프레임워크) + Linq 쿼리식 

    - ORM 도구 

    - ADO.NET이나 Enterprise Library를 배우는 건 솔직히 의미 없음 

   

일반 SQL => SELECT * FROM user WHERE userNo = 1; 

 

Linq 쿼리식 => user.where(u=>u.userNo = 1) // C# 코드로 구성이 되어 있음 

 

 

 

 

'Develop > ASP.NET CORE' 카테고리의 다른 글

05-1 MSSQL - ASP.NET CORE 연동  (0) 2021.03.05
04 - Layout 구성  (0) 2021.03.04
03 - 데이터 전달  (0) 2021.03.03
02 - MVC 프로젝트 생성  (0) 2021.03.03
01 - ASP.NET CORE 시작하기  (0) 2021.03.03