솔직하다: between being honest and being outspoken.
정직하다: between being honest and being truthful.
그는 정직한 사람이다: He never lies. He is upright and acts morally.
그는 솔직한 사람이다: He says whatever he feels (he has to), even if he knows that his words will upset other people or hurt himself.